「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
本篇将详细讲解Cangjie中的整数类型,探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景,帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。
关键词
- 有符号整数与无符号整数
- 表示范围与溢出
- 进制表示
- 类型转换
- 字面量与操作
一、整数类型概述
在Cangjie中,整数类型分为**有符号(signed)整数类型和无符号(unsigned)**整数类型。
- 有符号整数:包括 Int8、Int16、Int32、Int64 和 IntNative,分别用于表示编码长度为 8-bit、16-bit、32-bit、64-bit 和平台相关大小的有符号整数值。
- 无符号整数:包括 UInt8、UInt16、UInt32、UInt64 和 UIntNative,表示相同编码长度的无符号整数值。
二、整数类型的表示范围
- 有符号整数范围为 -2^(N-1) 到 2^(N-1)-1。
- 无符号整数范围为 0 到 2^N-1。
类型 | 表示范围 |
---|---|
Int8 | -128 ~ 127 |
Int16 | -32,768 ~ 32,767 |
Int32 | -2,147,483,648 ~ 2,147,483,647 |
Int64 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
UInt8 | 0 ~ 255 |
UInt16 | 0 ~ 65,535 |
UInt32 | 0 ~ 4,294,967,295 |
UInt64 | 0 ~ 18,446,744,073,709,551,615 |
使用建议:通常建议优先使用 Int64 和 UInt64,除非特别需要节省内存或控制特定范围。整数类型字面量在没有类型上下文时默认推断为 Int64,可以避免不必要的类型转换。
三、整数的进制表示
整数类型字面量可以用四种进制表示:
- 二进制:0b 或 0B 开头,例如 0b1101 表示 13。
- 八进制:0o 或 0O 开头,例如 0o15 表示 13。
- 十进制:无前缀,如 13。
- 十六进制:0x 或 0X 开头,例如 0xD 表示 13。
在各进制表示中,可用下划线 _ 作为分隔符来提高可读性。
let binNum = 0b1010_1010 // 二进制
let octNum = 0o52 // 八进制
let decNum = 42 // 十进制
let hexNum = 0x2A // 十六进制println("二进制: ${binNum}, 八进制: ${octNum}, 十进制: ${decNum}, 十六进制: ${hexNum}")
输出:
二进制: 170, 八进制: 42, 十进制: 42, 十六进制: 42
四、整数的基本操作
Cangjie中的整数类型支持以下基本操作符,包括算术、位、关系和自增自减操作。
4.1 算术操作
算术操作符包括加(+)、减(-)、乘(*)、除(/)和取模(%):
let a: Int64 = 10
let b: Int64 = 3let sum = a + b
let difference = a - b
let product = a * b
let quotient = a / b
let remainder = a % b println("加法: ${sum}, 减法: ${difference}, 乘法: ${product}, 除法: ${quotient}, 取模: ${remainder}")
输出:
加法: 13, 减法: 7, 乘法: 30, 除法: 3, 取模: 1
4.2 位操作
位操作包括按位求反、按位与、按位或、左移、右移等:
let andVal = 0b1100 & 0b1010 // 按位与
let orVal = 0b1100 | 0b1010 // 按位或
let xorVal = 0b1100 ^ 0b1010 // 按位异或
let shiftLeft = 0b0001 << 2 // 左移两位
let shiftRight = 0b0100 >> 2 // 右移两位println("按位与: ${andVal}, 按位或: ${orVal}, 按位异或: ${xorVal}, 左移: ${shiftLeft}, 右移: ${shiftRight}")
输出:
按位与: 8, 按位或: 14, 按位异或: 6, 左移: 4, 右移: 1
4.3 自增和自减操作
Cangjie支持自增(++)和自减(–)作为后缀操作符:
var counter = 5
println(counter++) // 理想输出 5,然后 counter 变为 6
println(counter--) // 理想输出 6,然后 counter 变为 5
理想输出:
5
6
实际输出(Cangjie 0.55.3 版本):
()
()
替代方案:
var counter = 5
println(counter) // 输出 5
counter++
println(counter) // 输出 6
counter--
println(counter) // 输出 5
五、整数的类型转换
Cangjie支持整数类型之间的转换,通常通过 .toInt64()、.toInt32() 等方法进行。
let smallNum: Int32 = 100
let largeNum: Int64 = Int64(smallNum) // Int32 转 Int64let bigNum: Int64 = 123456789
let reducedNum: Int32 = Int32(bigNum) // Int64 转 Int32println("Int32转Int64: ${largeNum}, Int64转Int32: ${reducedNum}")
输出:
Int32转Int64: 100, Int64转Int32: 123456789
六、整数类型字面量与类型后缀
整数类型字面量可使用后缀指定类型,便于在不同类型的表达式中进行明确的类型转换:
后缀 | 类型 |
---|---|
i8 | Int8 |
i16 | Int16 |
i32 | Int32 |
i64 | Int64 |
u8 | UInt8 |
u16 | UInt16 |
u32 | UInt32 |
u64 | UInt64 |
示例:
let x = 100i8 // Int8 类型
let y = 0x10u64 // UInt64 类型
let z = 0o432i32 // Int32 类型println("x: ${x}, y: ${y}, z: ${z}")
输出:
x: 100, y: 16, z: 282
七、整数在实际应用中的场景
整数类型适用于计数、循环控制和标识等操作,能够有效处理需要整数量的数据情境。
7.1 计数应用
let items: Int64 = 5
for (i in 1..items) {println("Item ${i}")
}
输出:
Item 1
Item 2
Item 3
Item 4
7.2 标识符应用
整数类型也常用于作为标识符,用于唯一识别数据。
class User {var id: Int64var name: Stringinit(id: Int64, name: String) {this.id = idthis.name = name}
}let user = User(1, "Alice")
println("User ID: ${user.id}, Name: ${user.name}")
输出:
User ID: 1, Name: Alice
小结
本篇详细讲解了Cangjie整数类型的定义、表示范围、进制表示、基本操作及实际应用场景,帮助开发者熟练运用整数类型构建程序逻辑。
下篇预告
下一篇将详细解析Cangjie的 浮点类型,深入理解小数运算及其应用,敬请关注 「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解!
上一篇: 「Mac玩转仓颉内测版22」基础篇2 - 基础数据类型简述
下一篇: 「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=205
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章:
「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
本篇将详细讲解Cangjie中的整数类型,探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景,帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。 关键词 有符号整数与无符号整数表示范围与溢出进制表示类型转换字面量与操作 一、整数类型概…...
渗透测试导学
渗透测试导学 渗透测试概念 渗透测试是干什么? 渗透测试的定义和目的:渗透测试是一种通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全性能的评估方法。它的目的是通过识别安全问题,帮助了解当前的安全状况,从而…...
Django实现智能问答助手-基础配置
设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑,并设计用户界面。下面是一步一步的简要说明: 目录: QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...
亚马逊商品详情API接口解析,Json数据示例返回
亚马逊的商品详情API接口(如Amazon Product Advertising API)允许开发者获取商品的详细信息,包括价格、描述、图片URL等。以下是一个示例的JSON数据返回结构,以及相应的解析说明。请注意,实际返回的数据结构可能会根据…...
git根据远程分支创建本地新分支
比如我当前本地仓库有4个 remote 仓库,我希望根据其中的一个 <remote>/<branch> 创建本地分支: 先使用 github fetch <remote> 拉取 <remote> 的分支信息,然后在 git checkout -b 创建新分支时使用 -t <remote>…...
Android U 多任务启动分屏——SystemUI流程(更新中)
前文 Android U 多任务启动分屏——Launcher流程(下分屏) 前文说到通过ISplitScreen接口跨进程调用到了SystemUI进程,我们继续分析分屏在systemui中的实现。 wmshell实现分屏 实现ISplitScreen接口 代码路径:frameworks/base/…...
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手
使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介: Aurora是一个带UI且免费的GPT私人聊天助手,可切换GPT-3.5,4,4o等常用版本。用户可通过部署Aurora,快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...
.NET 9与C# 13革新:新数据类型与语法糖深度解析
记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…...
2.fs文件系统模块
文章目录 [TOC](文章目录)2.5.练习-成绩管理2.5.1在files文件夹下新建成绩.txt文件2.5.2.新建对应的js文件 2.6.fs模块-路径动态拼接的问题 3.path路径模块3.1什么是path路径模块3.2.路径拼接3.3.获取路径中的文件名3.4.获取路径中的文件扩展名3.5.案例3.5.1.步骤13.5.2.调用fs…...
Ubuntu24.04LTS设置root用户可远程登录
Ubuntu24.04LTS设置root用户可远程登录 文章目录 Ubuntu24.04LTS设置root用户可远程登录1. 设置root密码2. 设置root用户可远程登录1. 查看ssh服务是否安装2. 安装ssh服务3. 再次查看ssh服务是否安装4. 配置ssh文件5. 重启ssh服务6. root远程登录 1. 设置root密码 Ubuntu安装后…...
ROS2指令总结(跟随古月居教程学习)
博主跟随古月居博客进行ROS2学习,对ROS2相关指令进行了总结,方便学习和回顾。 古月居ROS2博文链接:https://book.guyuehome.com/ 本文会持续进行更新,觉得有帮助的朋友可以点赞收藏。 1. ROS2安装命令 $ sudo apt update &am…...
IPTV智慧云桌面,后台服务器搭建笔记
环境CentOs7.9 ,安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔,修改服务器端口安全组端口 26029 注意!!!!…...
徒手从零搭建一套ELK日志平台
徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…...
udp_socket
文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen UDP服务器封装 系统调用socket …...
肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)
大家好!我是凯哥,今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线,并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的,花费了不少精力哦,希望对…...
【Golang】手搓DES加密
代码非常长 有六百多行 参考一位博主的理论实现 通俗易懂,十分钟读懂DES 还有很多不足的地方 感觉只是个思路 S盒(理论既定) package src// 定义S - 盒的置换表 var SBoxes [8][4][16]int{{{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, …...
YouQu使用手册【元素定位】
元素定位 文章目录 前言一、气泡识别二、不依赖OpenCV的图像识别方案三、动态图像识别四、背景五、sniff(嗅探器)使用六、元素操作七、框架封装八、背景【OCR识别】九、实现原理十、使用说明十一、RPC服务端部署十二、负载均衡十三、链式调用十四、背景【相对坐标定位】十五、…...
Spark RDD sortBy算子什么情况会触发shuffle
在 Spark 的 RDD 中,sortBy 是一个排序算子,虽然它在某些场景下可能看起来是分区内排序,但实际上在需要全局排序时会触发 Shuffle。这里我们分析其底层逻辑,结合源码和原理来解释为什么会有 Shuffle 的发生。 1. 为什么 sortBy 会…...
机器视觉相机重要名词
机器视觉相机的重要名词包括: • 工业数字相机:又称工业相机,是机器视觉系统中的关键组件。 • 电荷偶合元件(CCD):一种图像传感器,能将光学影像转换为数字信号。 • 互补金属氧化物半导体&…...
Django:从入门到精通
一、Django背景 Django是一个由Python编写的高级Web应用框架,以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发,旨在简化Web应用的开发过程。作为一个开放源代码项目,Django迅速吸引了大量的开发…...
android viewpager2 嵌套 recyclerview 手势冲突
老规矩直接上代码, 不分析: import android.content.Context import android.util.AttributeSet import android.view.MotionEvent import android.view.View import android.view.ViewConfiguration import android.view.ViewGroup import android.widg…...
依赖管理(go mod)
目录 各版本依赖管理的时间分布 一、GOPATH 1. GOROOT是什么 定义: 作用: 默认值: 是否需要手动设置: 查看当前的 GOROOT: 2. GOPATH:工作区目录 定义: 作用:…...
Apple Vision Pro开发001-开发配置
一、Vision Pro开发硬件和软件要求 硬件要求软件要求 1、Apple Silicon Mac(M系列芯片的Mac电脑) 2、Apple vision pro-真机调试 XCode15.2及以上,调试开发和打包发布Unity开发者账号&&苹果开发者账号 二 、开启无线调试 1、Apple Vision Pro和Mac连接同…...
android 动画原理分析
一 android 动画分为app内的view动画和系统动画 基本原理都是监听Choreographer的doframe回调 二 app端的实现是主要通过AnimationUtils来实现具体属性的变化通过invilate来驱动 wms来进行更新。这个流程是在app进程完成 这里不是我分析的重点 直接来看下系统动画里面的本地动…...
Elasticsearch 6.8 分析器
在 Elasticsearch 中,分析器(Analyzer)是文本分析过程中的一个关键组件,它负责将原始文本转换为一组词汇单元(tokens)。 分析器由三个主要部分组成:分词器(Tokenizer)、…...
实验室资源调度系统:基于Spring Boot的创新
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
实验三:构建园区网(静态路由)
目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1:完成网络部署 2、任务 2:设计全网 IP 地址 3、任务 3:实现全网各主机之间的互访 六、实验步骤 1、在 eNSP 中部署网络 2、配置各主机 IP …...
3. SQL优化
SQL性能优化 在日常开发中,MySQL性能优化是一项必不可少的技能。本文以具体案例为主线,结合实际问题,探讨如何优化插入、排序、分组、分页、计数和更新等操作,帮助你实现数据库性能的飞跃。 一、索引设计原则 索引是MySQL优化的…...
web——upload-labs——第十一关——黑名单验证,双写绕过
还是查看源码, $file_name str_ireplace($deny_ext,"", $file_name); 该语句的作用是:从 $file_name 中去除所有出现在 $deny_ext 数组中的元素,替换为空字符串(即删除这些元素)。str_ireplace() 在处理时…...
AWS CLI
一、AWS CLI介绍 1、简介 AWS CLI(Amazon Web Services Command Line Interface)是一个命令行工具,它允许用户通过命令行与 Amazon Web Services(AWS)的各种云服务进行交互和管理。使用 AWS CLI,用户可以直接在终端或命令行界面中执行命令来配置、管理和自动化AWS资源,…...
WordPress discuz 仿站/seo搜索优化 指数
文章目录1. 条件搜索1) 等值比较2) 不等于比较3) 完整案例2. 模糊匹配1. 条件搜索 使用条件搜索时,可以直接使用filter链来过滤掉满足条件的记录,因为每次filter()的结果仍然是一个QuerySet,因此可以根据参数有无,来添加filter。 先不添加任何…...
南京公司网站建设/全网推广外包公司
此文转载自:https://blog.csdn.net/weixin_50998641/article/details/110247848#commentBox第一题view_source鼠标无法查看网页源代码,可以利用F12来查看,flag就在网页源码中。第二题robots根据题目提示robots,此题考查robots协议…...
企?I网站建站 ?V州 ??l/百度合作平台
JSR303数据校验 如何使用 Springboot中可以用validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式; application.yml sowhat:name: zhangsanperson:name: sowhat$…...
wordpress 照片展示/西安seo顾问培训
1 详解1.1 Buffer 结构Buffer 是抽象类,子类共有7个实现,他们都是 abstract 类型,如下图所示:1.2 Buffer 创建allocateallocate 通过指定 buffer 的容量,然后新建对象,ByteBuffer 还可以通过 allocateDirec…...
建网站视频教程/站长网站推广
杜洪亮摘 要:通过对济南轨道交通3号线王舍人站~裴家营站区间盾构长距离侧穿高架桥桩施工控制情况进行总结分析,重点论述了辅助措施的重要性,分析了粉质黏土地层中盾构长距离侧穿构筑物不可避免的施工风险,并探讨了盾构穿越该段掘…...
网站建设的线框图叫什么/关键词优化的软件
1、RBD介绍 RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照(RDB的快照在恢复数据的时候就可以直接恢复快照了)、多副本、克隆和一致性等特性,数据以条带化…...