当前位置: 首页 > news >正文

「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型

本篇将详细讲解Cangjie中的整数类型,探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景,帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。


关键词
  • 有符号整数与无符号整数
  • 表示范围与溢出
  • 进制表示
  • 类型转换
  • 字面量与操作

一、整数类型概述

在Cangjie中,整数类型分为**有符号(signed)整数类型和无符号(unsigned)**整数类型。

  • 有符号整数:包括 Int8Int16Int32Int64IntNative,分别用于表示编码长度为 8-bit、16-bit、32-bit、64-bit 和平台相关大小的有符号整数值。
  • 无符号整数:包括 UInt8UInt16UInt32UInt64UIntNative,表示相同编码长度的无符号整数值。

二、整数类型的表示范围
  1. 有符号整数范围为 -2^(N-1) 到 2^(N-1)-1。
  2. 无符号整数范围为 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
UInt80 ~ 255
UInt160 ~ 65,535
UInt320 ~ 4,294,967,295
UInt640 ~ 18,446,744,073,709,551,615

使用建议:通常建议优先使用 Int64UInt64,除非特别需要节省内存或控制特定范围。整数类型字面量在没有类型上下文时默认推断为 Int64,可以避免不必要的类型转换。


三、整数的进制表示

整数类型字面量可以用四种进制表示:

  • 二进制0b0B 开头,例如 0b1101 表示 13。
  • 八进制0o0O 开头,例如 0o15 表示 13。
  • 十进制:无前缀,如 13
  • 十六进制0x0X 开头,例如 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

六、整数类型字面量与类型后缀

整数类型字面量可使用后缀指定类型,便于在不同类型的表达式中进行明确的类型转换:

后缀类型
i8Int8
i16Int16
i32Int32
i64Int64
u8UInt8
u16UInt16
u32UInt32
u64UInt64

示例:

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中的整数类型&#xff0c;探讨整数的定义、操作、表示范围、进制表示、类型转换及应用场景&#xff0c;帮助开发者在Cangjie中灵活运用整数类型构建程序逻辑。 关键词 有符号整数与无符号整数表示范围与溢出进制表示类型转换字面量与操作 一、整数类型概…...

渗透测试导学

渗透测试导学 渗透测试概念 渗透测试是干什么&#xff1f; 渗透测试的定义和目的&#xff1a;渗透测试是一种通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全性能的评估方法。它的目的是通过识别安全问题&#xff0c;帮助了解当前的安全状况&#xff0c;从而…...

Django实现智能问答助手-基础配置

设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑&#xff0c;并设计用户界面。下面是一步一步的简要说明&#xff1a; 目录&#xff1a; QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...

亚马逊商品详情API接口解析,Json数据示例返回

亚马逊的商品详情API接口&#xff08;如Amazon Product Advertising API&#xff09;允许开发者获取商品的详细信息&#xff0c;包括价格、描述、图片URL等。以下是一个示例的JSON数据返回结构&#xff0c;以及相应的解析说明。请注意&#xff0c;实际返回的数据结构可能会根据…...

git根据远程分支创建本地新分支

比如我当前本地仓库有4个 remote 仓库&#xff0c;我希望根据其中的一个 <remote>/<branch> 创建本地分支&#xff1a; 先使用 github fetch <remote> 拉取 <remote> 的分支信息&#xff0c;然后在 git checkout -b 创建新分支时使用 -t <remote>…...

Android U 多任务启动分屏——SystemUI流程(更新中)

前文 Android U 多任务启动分屏——Launcher流程&#xff08;下分屏&#xff09; 前文说到通过ISplitScreen接口跨进程调用到了SystemUI进程&#xff0c;我们继续分析分屏在systemui中的实现。 wmshell实现分屏 实现ISplitScreen接口 代码路径&#xff1a;frameworks/base/…...

使用SaaS化的Aurora应用快速搭建私人ChatGPT助手

使用SaaS化的Aurora应用快速搭建私人ChatGPT助手 简介&#xff1a; Aurora是一个带UI且免费的GPT私人聊天助手&#xff0c;可切换GPT-3.5&#xff0c;4&#xff0c;4o等常用版本。用户可通过部署Aurora&#xff0c;快速打造自己专属的AI助手。阿里云计算巢已将Aurora打包为SaaS…...

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录&#xff08;Record&#xff09;类型 使用方式&#xff1a; public record Person(string FirstName, string LastName); 适用场景&#xff1a;当需要创建不可变的数据结构&#xff0c;且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景&#xff1a;当数据结构需…...

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学习&#xff0c;对ROS2相关指令进行了总结&#xff0c;方便学习和回顾。 古月居ROS2博文链接&#xff1a;https://book.guyuehome.com/ 本文会持续进行更新&#xff0c;觉得有帮助的朋友可以点赞收藏。 1. ROS2安装命令 $ sudo apt update &am…...

IPTV智慧云桌面,后台服务器搭建笔记

环境CentOs7.9 &#xff0c;安装宝塔yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 访问宝塔&#xff0c;修改服务器端口安全组端口 26029 注意&#xff01;&#xff01;&#xff01;&#xff01…...

徒手从零搭建一套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 …...

肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)

大家好&#xff01;我是凯哥&#xff0c;今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线&#xff0c;并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的&#xff0c;花费了不少精力哦&#xff0c;希望对…...

【Golang】手搓DES加密

代码非常长 有六百多行 参考一位博主的理论实现 通俗易懂&#xff0c;十分钟读懂DES 还有很多不足的地方 感觉只是个思路 S盒&#xff08;理论既定&#xff09; 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 中&#xff0c;sortBy 是一个排序算子&#xff0c;虽然它在某些场景下可能看起来是分区内排序&#xff0c;但实际上在需要全局排序时会触发 Shuffle。这里我们分析其底层逻辑&#xff0c;结合源码和原理来解释为什么会有 Shuffle 的发生。 1. 为什么 sortBy 会…...

机器视觉相机重要名词

机器视觉相机的重要名词包括&#xff1a; • 工业数字相机&#xff1a;又称工业相机&#xff0c;是机器视觉系统中的关键组件。 • 电荷偶合元件&#xff08;CCD&#xff09;&#xff1a;一种图像传感器&#xff0c;能将光学影像转换为数字信号。 • 互补金属氧化物半导体&…...

Django:从入门到精通

一、Django背景 Django是一个由Python编写的高级Web应用框架&#xff0c;以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发&#xff0c;旨在简化Web应用的开发过程。作为一个开放源代码项目&#xff0c;Django迅速吸引了大量的开发…...

Boss-Key老板键:如何用3分钟掌握一键隐藏窗口的终极技巧

Boss-Key老板键&#xff1a;如何用3分钟掌握一键隐藏窗口的终极技巧 【免费下载链接】Boss-Key 老板来了&#xff1f;快用Boss-Key老板键一键隐藏静音当前窗口&#xff01;上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 你是否经历过这样的时…...

告别Makefile!用Zig 0.10.0自带的构建系统搞定ARM裸机开发(附完整项目配置)

用Zig构建系统重塑ARM裸机开发&#xff1a;告别Makefile的终极指南 当你在凌晨三点盯着第47个Makefile规则调试链接器错误时&#xff0c;是否想过——嵌入式开发必须这么痛苦吗&#xff1f;Zig 0.10.0带来的不仅是一门新语言&#xff0c;更是一套彻底革新裸机开发工作流的构建系…...

Qwen3.5-4B-Claude-Opus应用场景:企业内训材料自动提炼+考试题生成实践

Qwen3.5-4B-Claude-Opus应用场景&#xff1a;企业内训材料自动提炼考试题生成实践 1. 企业培训面临的挑战 现代企业培训部门常常面临两大痛点&#xff1a;一是海量培训材料的整理提炼工作耗时费力&#xff0c;二是培训效果评估缺乏科学高效的考核手段。传统人工处理方式存在以…...

毕业设计模板:新手入门级全栈项目结构与避坑指南

很多同学在做毕业设计时&#xff0c;常常会遇到这样的场景&#xff1a;项目初期雄心勃勃&#xff0c;但写着写着就发现代码越来越乱&#xff0c;前后端耦合在一起&#xff0c;想加个新功能都无从下手&#xff0c;最后只能硬着头皮交一个“能跑就行”的“缝合怪”项目。今天&…...

基于STM32CubeMX的AD9850驱动开发与频率合成实战

1. 从零开始认识AD9850与STM32CubeMX 第一次接触AD9850这个芯片时&#xff0c;我完全被它的性能震撼到了——这个比指甲盖还小的芯片&#xff0c;居然能产生0.0291Hz分辨率的信号&#xff01;当时我正在做一个射频测试项目&#xff0c;需要生成精确的正弦波信号。市面上常见的…...

如何高效优化多语言模型:专业部署的完整策略

如何高效优化多语言模型&#xff1a;专业部署的完整策略 【免费下载链接】paraphrase-multilingual-MiniLM-L12-v2 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/paraphrase-multilingual-MiniLM-L12-v2 你是否在部署多语言文本嵌入模型时遭遇过"显存…...

当Logo消失,品牌资产还剩多少?

这个问题问得直接——品牌费尽心思把Logo放大、放正、放在C位&#xff0c;可如果有一天消费者真的“看不见”它&#xff0c;品牌还剩下什么&#xff1f;答案取决于品牌建设的本质&#xff1a;是在做识别符号&#xff0c;还是在做价值沉淀。1. 认知资产&#xff1a;剩不下什么Lo…...

从Sigmoid函数到脉冲频率:步进电机S型加减速的数学建模与C/C++实现

1. 为什么步进电机需要S型加减速 我第一次接触步进电机控制时&#xff0c;以为只要给脉冲信号就能让电机转起来。结果在实际项目中&#xff0c;电机要么启动时丢步&#xff0c;要么停止时过冲&#xff0c;把机械结构撞得砰砰响。后来才知道&#xff0c;步进电机和普通直流电机不…...

生成式AI欺诈来袭,什么样的IP数据接口才能筑起防线?

某电商平台的风控系统发出预警&#xff1a;一个“新用户”正在批量下单高价商品&#xff0c;收货地址遍布全国&#xff0c;支付方式各不相同。但奇怪的是&#xff0c;这些订单的浏览行为、停留时间、点击轨迹几乎完全一致——这不是真人&#xff0c;而是生成式AI模拟的虚假用户…...

如何安全备份QQ空间历史说说?GetQzonehistory工具全攻略

如何安全备份QQ空间历史说说&#xff1f;GetQzonehistory工具全攻略 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心过QQ空间里那些承载着青春记忆的说说有一天会突然消失&…...