ZHCUAU3K January 2018 – March 2025
表 5-1列出了 C7000 编译器的每种标量数据类型的大小、表示形式和范围。许多范围值在头文件 limits.h 中作为标准宏命令提供。
节 6.2.1中介绍了数据类型的存储和对齐。
| 范围 | ||||
|---|---|---|---|---|
| 类型 | 大小 | 表示 | 最小值 | 最大值 |
| char、signed char | 8 位 | ASCII | -128 | 127 |
| unsigned char | 8 位 | ASCII | 0 | 255 |
| _Bool、bool | 8 位 | ASCII | 0 (false) | 1 (true) |
| short | 16 位 | 二进制 | -32 768 | 32 767 |
| unsigned short | 16 位 | 二进制 | 0 | 65 535 |
| int、signed int | 32 位 | 二进制 | -2 147 483 648 | 2 147 483 647 |
| unsigned int、wchar_t | 32 位 | 二进制 | 0 | 4 294 967 295 |
| long、signed long | 64 位 | 二进制 | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 808 |
| unsigned long | 64 位 | 二进制 | 0 | 18 446 744 073 709 551 615 |
| long long、signed long long | 64 位 | 二进制 | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 |
| unsigned long long | 64 位 | 二进制 | 0 | 18 446 744 073 709 551 615 |
| enum (1) | 不尽相同 | 二进制 | 不尽相同 | 不尽相同 |
| float | 32 位 | IEEE 32 位 | 1.175 494e-38(2) | 3.40 282 346e+38 |
| float complex | 64 位 | 2 个 IEEE 32 位数组 | 1.175 494e-38 分别适用于实部和虚部 | 3.40 282 346e+38 分别适用于实部和虚部 |
| double | 64 位 | IEEE 64 位 | 2.22 507 385e-308(2) | 1.79 769 313e+308 |
| double complex | 128 位 | 2 个 IEEE 64 位数组 | 2.22 507 385e-308 分别适用于实部和虚部 | 1.79 769 313e+308 分别适用于实部和虚部 |
| long double | 64 位 | IEEE 64 位 | 2.22 507 385e-308(2) | 1.79 769 313e+308 |
| long double complex | 128 位 | 2 个 IEEE 64 位数组 | 2.22 507 385e-308 分别适用于实部和虚部 | 1.79 769 313e+308 分别适用于实部和虚部 |
| 指针、引用、指向数据成员的指针 | 64 位 | 二进制 | 0 | 0xFFFFFFFFFFFFFFFF |
有符号类型的负值用 2 的补码表示。
当不同设备和编译器之间实现可移植性需要特定的数据类型大小时,建议代码使用 C 标准整数类型 int64_t 和 int32_t(等)。这些标准整数类型是在 stdint.h 中定义的,其作为 C 标准库支持的一部分被包含在运行时支持库中。
C7000 采用 LP64 代表性惯例。也就是说,类型 int 是 32 位,而 long 和 pointer 类型是 64 位。
C、C99 和 C++ 的这些附加类型被定义为标准类型的同义词:
| 类型 | 定义 |
|---|---|
| size_t | unsigned long |
| ptrdiff_t | long |
| wchar_t | unsigned int |
| wint_t | int |
| va_list | char * |