06-数字类型(1)
什么是数据类型
在编程的世界中,很多情况下我们要操作的目标都是数据。比如仓库管理系统,需要通过数据来登记各种设备信息,航班管理系统,通过
数据来记录航班的信息。为了方便管理各种各样的数据,我们可以设计出不同的数据类型,方便我们的程序操作。仓颉编程语言中,关于基础数据类型 一共分为了 10 种。分别是:
数据类型 | 简单介绍 |
---|---|
整数类型 | 用于表示整数数值。 |
浮点类型 | 用来表示带有小数部分的数值。 |
布尔类型 | 存放表示真假的逻辑值。 |
字符类型 | 表示单个字符。 |
字符串类型 | 可存储多个字符组成的文本内容。 |
元组类型 | 将多个不同类型的数据组合起来。 |
数组类型 | 能存放一组相同类型的数据元素。 |
区间类型 | 可表示一定范围内的数值区间。 |
Unit 类型 | 常表示无返回值等特定语义情况。 |
Nothing 类型 | 代表空或无的概念。 |
整数类型
整数类型分为有符号(signed)整数类型和无符号(unsigned 非负数)整数类型。
有符号整数类型包括 Int8
、Int16
、Int32
、Int64
和 IntNative
,分别用于表示编码长度为 8-bit
、16-bit
、32-bit
、64-bit
和平台相关大小的有符号整数值的类型。
无符号整数类型包括 UInt8
、UInt16
、UInt32
、UInt64
和 UIntNative
,分别用于表示编码长度为 8-bit
、16-bit
、32-bit
、64-bit
和平台相关大小的无符号整数值的类型。
对于编码长度为 N
的有符号整数类型,其表示范围为: -2^(N-1) ~ 2^(N-1) - 1
;对于编码长度为 N
的无符号整数类型,其表示范围为:0~2^(N-1)
。下表列出了所有整数类型的表示范围:
程序具体使用哪种整数类型,取决于该程序中需要处理的整数的性质和范围。在 Int64
类型适合的情况下,首选 Int64
类型,因为
Int64
的表示范围足够大,并且整数类型字面量在没有类型上下文的情况下默认推断为 Int64
类型,可以避免不必要的类型转换。
整数类型字面量
整数字面量就是一眼能看出来是整数的字面的代码
如:
100 整数
200 整数
xdfds 不是整数
其中,整数类型字面量有 4 种进制表示形式:二进制(使用 0b
或 0B
前缀)、八进制(使用 0o
或 0O
前缀)、十进制(没有前缀)、十六进制(使用 0x
或 0X
前缀)。例如,对于十进制数 24
,表示成二进制是 0b00011000
(或 0B00011000
),表示成八进制是 0o30
(或 0O30
),表示成十六进制是 0x18
(或 0X18
)。默认的数字都是十进制。如 100
,一般可以理解为 就是 十进制中的 100
在各进制表示中,可以使用下划线 _
充当分隔符的作用,方便识别数值的位数,如 0b0001_1000
。
对于整数类型字面量,如果它的值超出了上下文要求的整数类型的表示范围,编译器将会报错。
let x: Int8 = 128; // Error, 128 out of the range of Int8
let y: UInt8 = 256; // Error, 256 out of the range of UInt8
let z: Int32 = 0x8000_0000; // Error, 0x8000_0000 out of the range of Int32
在使用整数类型字面量时,可以通过加入后缀来明确整数字面量的类型,后缀与类型的对应为:
后缀 | 类型 | 后缀 | 类型 |
---|---|---|---|
i8 | Int8 | u8 | UInt8 |
i16 | Int16 | u16 | UInt16 |
i32 | Int32 | u32 | UInt32 |
i64 | Int64 | u64 | UInt64 |
加入了后缀的整数字面量可以像下面的方式来使用:
var x = 100i8 // x is 100 with type Int8
var y = 0x10u64 // y is 16 with type UInt64
var z = 0o432i32 // z is 282 with type Int32
字符字节字面量
仓颉编程语言支持字符字节字面量,以方便使用 ASCII 码表示 UInt8
类型的值。字符字节字面量由字符 b、一对标识首尾的单引号、以及一个 ASCII
字符组成,例如:
var a = b'x' // a is 120 with type UInt8
var b = b'\n' // b is 10 with type UInt8
var c = b'\u{78}' // c is 120 with type UInt8
b'x'
表示类型为 UInt8 大小是 120 的字面值。另外还可以通过 b'\u{78}'
这种转义形式表示类型为 UInt8
,16 进制大小为 0x78 或 10 进制大小为 120 的字面值。需要注意的是,\u
内部最多有两位 16 进制数,并且值必须小于 256(十进制)。
ASCII 表
十进制 | 十六进制 | 字符 |
---|---|---|
48 | 30 | 0 |
49 | 31 | 1 |
50 | 32 | 2 |
51 | 33 | 3 |
52 | 34 | 4 |
53 | 35 | 5 |
54 | 36 | 6 |
55 | 37 | 7 |
56 | 38 | 8 |
57 | 39 | 9 |
65 | 41 | A |
66 | 42 | B |
67 | 43 | C |
68 | 44 | D |
69 | 45 | E |
70 | 46 | F |
71 | 47 | G |
72 | 48 | H |
73 | 49 | I |
74 | 4A | J |
75 | 4B | K |
76 | 4C | L |
77 | 4D | M |
78 | 4E | N |
79 | 4F | O |
80 | 50 | P |
81 | 51 | Q |
82 | 52 | R |
83 | 53 | S |
84 | 54 | T |
85 | 55 | U |
86 | 56 | V |
87 | 57 | W |
88 | 58 | X |
89 | 59 | Y |
90 | 5A | Z |
97 | 61 | a |
98 | 62 | b |
99 | 63 | c |
100 | 64 | d |
101 | 65 | e |
102 | 66 | f |
103 | 67 | g |
104 | 68 | h |
105 | 69 | i |
106 | 6A | j |
107 | 6B | k |
108 | 6C | l |
109 | 6D | m |
110 | 6E | n |
111 | 6F | o |
112 | 70 | p |
113 | 71 | q |
114 | 72 | r |
115 | 73 | s |
116 | 74 | t |
117 | 75 | u |
118 | 76 | v |
119 | 77 | w |
120 | 78 | x |
121 | 79 | y |
122 | 7A | z |
33 | 21 | ! |
34 | 22 | " |
35 | 23 | # |
36 | 24 | $ |
37 | 25 | % |
38 | 26 | & |
39 | 27 | ' |
40 | 28 | ( |
41 | 29 | ) |
42 | 2A | * |
43 | 2B | + |
44 | 2C | , |
45 | 2D | - |
46 | 2E | . |
47 | 2F | / |
58 | 3A | : |
59 | 3B | ; |
60 | 3C | < |
61 | 3D | = |
62 | 3E | > |
63 | 3F | ? |
64 | 40 | @ |
91 | 5B | [ |
92 | 5C | | |
93 | 5D | ] |
94 | 5E | ^ |
95 | 5F | _ |
96 | 60 | ` |
123 | 7B | { |
124 | 7C | |
125 | 7D | } |
126 | 7E | ~ |