3.1.1 认识整数类型
仓颉的整数类型分为两种:有符号(signed)整数类型和无符号(unsigned)整数类型,如表3-1所示。
表3-1 仓颉的整数类型
有符号整数类型包括5种:Int8、Int16、Int32、Int64和IntNative。所有类型名称均以Int开头,后面所接的数字表示存储一个该类型的数据所需要的二进制位数。IntNative表示存储时需要的二进制位数与平台相关。同样,无符号整数类型也包括5种,不过所有类型名称均以UInt开头。
提示
“Int”是单词“integer”的前3个字符,integer的意思是“整数”。UInt中的“U”是单词“unsigned”的第1个字符,表示“无符号的”。
1.在赋值时避免发生溢出错误
由表3-1可知,不同的整数类型能够表示的整数范围是不同的。例如,从理论上说,8位二进制应该能够表示28(256)个不同的整数,而同样是使用8位二进制存储整数,Int8类型的表示范围为−128~127,UInt8类型的表示范围为0~255。这是因为,对于一个Int8类型的有符号整数,其最高位是符号位,表示正负号,真正用于表示数值大小的只有7位,所以其表示范围为−27~−1、0、1~27−1。对于一个UInt8类型的无符号整数,由于没有符号位,因此其表示范围为0、1~28−1。
在给整数类型变量赋值时,要避免发生溢出错误。举例如下:
main() { var x: Int8 x = 128 // 溢出错误:128超出了Int8类型的表示范围 }
在以上示例中,由于x是Int8类型的变量,而Int8类型的表示范围为-128~127,因此,将超出Int8类型表示范围的字面量128赋给x时溢出了。
2.整数类型字面量的后缀
在使用整数类型字面量时,可以给字面量后面加上类型后缀,以明确整数字面量的类型。整数类型与类型后缀的对应关系如表3-2所示。
表3-2 整数类型与类型后缀的对应关系
以下是一些使用了类型后缀的整数类型字面量:
18i8 // Int8类型的字面量18 2023u16 // UInt16类型的字面量2023 30000i32 // Int32类型的字面量30000
提示
为了提高整数类型字面量的可读性,可以使用下画线(_)作为分隔符。例如,字面量10000000000可以写作10_000_000_000,也可以写作100_0000_0000。