Skip to content

06-数字类型(1)

什么是数据类型

在编程的世界中,很多情况下我们要操作的目标都是数据。比如仓库管理系统,需要通过数据来登记各种设备信息,航班管理系统,通过

数据来记录航班的信息。为了方便管理各种各样的数据,我们可以设计出不同的数据类型,方便我们的程序操作。仓颉编程语言中,关于基础数据类型 一共分为了 10 种。分别是:

数据类型简单介绍
整数类型用于表示整数数值。
浮点类型用来表示带有小数部分的数值。
布尔类型存放表示真假的逻辑值。
字符类型表示单个字符。
字符串类型可存储多个字符组成的文本内容。
元组类型将多个不同类型的数据组合起来。
数组类型能存放一组相同类型的数据元素。
区间类型可表示一定范围内的数值区间。
Unit 类型常表示无返回值等特定语义情况。
Nothing 类型代表空或无的概念。

整数类型

整数类型分为有符号(signed)整数类型和无符号(unsigned 非负数)整数类型。

有符号整数类型包括 Int8Int16Int32Int64IntNative,分别用于表示编码长度为 8-bit16-bit32-bit64-bit 和平台相关大小的有符号整数值的类型。

无符号整数类型包括 UInt8UInt16UInt32UInt64UIntNative,分别用于表示编码长度为 8-bit16-bit32-bit64-bit 和平台相关大小的无符号整数值的类型。

对于编码长度为 N 的有符号整数类型,其表示范围为: -2^(N-1) ~ 2^(N-1) - 1;对于编码长度为 N 的无符号整数类型,其表示范围为:0~2^(N-1)。下表列出了所有整数类型的表示范围:

image-20241216073728167

程序具体使用哪种整数类型,取决于该程序中需要处理的整数的性质和范围。在 Int64 类型适合的情况下,首选 Int64 类型,因为

Int64 的表示范围足够大,并且整数类型字面量在没有类型上下文的情况下默认推断为 Int64 类型,可以避免不必要的类型转换。

整数类型字面量

整数字面量就是一眼能看出来是整数的字面的代码

如:

100 整数
200 整数
xdfds  不是整数

其中,整数类型字面量有 4 种进制表示形式:二进制(使用 0b0B 前缀)、八进制(使用 0o0O 前缀)、十进制(没有前缀)、十六进制(使用 0x0X 前缀)。例如,对于十进制数 24,表示成二进制是 0b00011000(或 0B00011000),表示成八进制是 0o30(或 0O30),表示成十六进制是 0x18(或 0X18)。默认的数字都是十进制。如 100 ,一般可以理解为 就是 十进制中的 100

在各进制表示中,可以使用下划线 _ 充当分隔符的作用,方便识别数值的位数,如 0b0001_1000

对于整数类型字面量,如果它的值超出了上下文要求的整数类型的表示范围,编译器将会报错。

typescript
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

在使用整数类型字面量时,可以通过加入后缀来明确整数字面量的类型,后缀与类型的对应为:

后缀类型后缀类型
i8Int8u8UInt8
i16Int16u16UInt16
i32Int32u32UInt32
i64Int64u64UInt64

加入了后缀的整数字面量可以像下面的方式来使用:

typescript
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 字符组成,例如:

typescript
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 表

十进制十六进制字符
48300
49311
50322
51333
52344
53355
54366
55377
56388
57399
6541A
6642B
6743C
6844D
6945E
7046F
7147G
7248H
7349I
744AJ
754BK
764CL
774DM
784EN
794FO
8050P
8151Q
8252R
8353S
8454T
8555U
8656V
8757W
8858X
8959Y
905AZ
9761a
9862b
9963c
10064d
10165e
10266f
10367g
10468h
10569i
1066Aj
1076Bk
1086Cl
1096Dm
1106En
1116Fo
11270p
11371q
11472r
11573s
11674t
11775u
11876v
11977w
12078x
12179y
1227Az
3321!
3422"
3523#
3624$
3725%
3826&
3927'
4028(
4129)
422A*
432B+
442C,
452D-
462E.
472F/
583A:
593B;
603C<
613D=
623E>
633F?
6440@
915B[
925C|
935D]
945E^
955F_
9660`
1237B{
1247C
1257D}
1267E~

Released under the MIT License.