「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迅速吸引了大量的开发…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
