C++ Builder 参考手册 ➙ C++ Builder 整型变量和整型常量
- 标准 C / C++ 整型变量
- 扩展 C / C++ 整型变量
- 标准 C / C++ 整型常量
- 扩展 C / C++ 整型常量
- 标准
和 整型变量 - 标准
整型常量值 - Windows API 整型变量
- C++ Builder 扩展整型变量
- C++ Builder 整型异常
一. 标准 C / C++ 整型变量
变量类型 | 说明 | 取值范围 |
---|---|---|
int | 有符号整型变量,16 / 32 位〖注1〗 | -2147483648 ~ 2147483647 |
signed int | 有符号整型变量,16 / 32 位〖注1〗 | -2147483648 ~ 2147483647 |
unsigned int | 无符号整型变量,16 / 32 位〖注1〗 | 0 ~ 4294967295 |
char | 8 位整型变量,有符号 / 无符号〖注2〗 | -128 ~ 127 |
signed char | 有符号 8 位整型变量〖注2〗 | -128 ~ 127 |
unsigned char | 无符号 8 位整型变量,有符号 / 无符号〖注2〗 | 0 ~ 255 |
short | 有符号 16 位整型变量 | -32768 ~ 32767 |
signed short | 有符号 16 位整型变量 | -32768 ~ 32767 |
unsigned short | 无符号 16 位整型变量 | 0 ~ 65535 |
long | 有符号 32 位整型变量 | -2147483648 ~ 2147483647 |
signed long | 有符号 32 位整型变量 | -2147483648 ~ 2147483647 |
unsigned long | 无符号 32 位整型变量 | 0 ~ 4294967295 |
long long | 有符号 64 位整型变量 | -9223372036854775808 ~ 9223372036854775807 |
signed long long | 有符号 64 位整型变量 | -9223372036854775808 ~ 9223372036854775807 |
unsigned long long | 无符号 64 位整型变量 | 0 ~ 18446744073709551615 |
〖注1〗提到整型变量,首先会想到 int 类型。int 类型在不同平台的字节数不同,Win32 和 Win64 是 32 位的。如果需要跨平台,需要确定 16 位或 32 位需要用 short 和 long 类型。
〖注2〗由于 char 类型在不同的平台里面,可能是有符号整数 (x86/x64),也可能是无符号整数 (ARM/PowerPC)。大多数编译器里面的 char 都是 8 位的整数,虽然 C / C++ 标准里面没有规定 char 的位数,但是说明了 char 必须支持 UTF-8 编码 (C++ 14),那么 char 就应该是 8 位整数。
二. 扩展 C / C++ 整型变量
很多编译器都有这些扩展的整型变量,C++ Builder 也支持这些类型:
变量类型 | 说明 | 取值范围 |
---|---|---|
__int8 | 8 位整型变量 | -128 ~ 127 |
signed __int8 | 8 位整型变量 | -128 ~ 127 |
unsigned __int8 | 8 位整型变量 | 0 ~ 255 |
__int16 | 16 位整型变量 | -32768 ~ 32767 |
signed __int16 | 16 位整型变量 | -32768 ~ 32767 |
unsigned __int16 | 16 位整型变量 | 0 ~ 65535 |
__int32 | 32 位整型变量 | -2147483648 ~ 2147483647 |
signed __int32 | 32 位整型变量 | -2147483648 ~ 2147483647 |
unsigned __int32 | 32 位整型变量 | 0 ~ 4294967295 |
__int64 | 64 位整型变量 | -9223372036854775808 ~ 9223372036854775807 |
signed __int64 | 64 位整型变量 | -9223372036854775808 ~ 9223372036854775807 |
unsigned __int64 | 64 位整型变量 | 0 ~ 18446744073709551615 |
__int128 | 128 位整型变量〖注3〗 | 〖注4〗 |
signed __int128 | 128 位整型变量〖注3〗 | 〖注4〗 |
unsigned __int128 | 128 位整型变量〖注3〗 | 〖注5〗 |
〖注3〗Win32 不支持,Win64 支持
〖注4〗取值范围 -170141183460469231731687303715884105728 ~ 170141183460469231731687303715884105727
〖注5〗取值范围 0 ~ 340282366920938463463374607431768211455
三. 标准 C / C++ 整型常量
1. 整型常量
- 十进制整型常量:数字 1 ~ 9 开头,接下来是 0 ~ 9 的数字,例如 12345,800000 等。前面可以有正负号,表示正数或负数,例如 -128,+65 等。要注意数字 0 开头的数字是八进制数,不是十进制数。0 本身无所谓几进制,都是等于 0 的。
- 十六进制整型常量:0x 或 0X 开头,接下来是 0 ~ 9 或 A ~ F / a ~ f 的数字或字母。例如 0x12,0xAB01 等。
- 八进制整型常量:数字 0 开头,接下来是 0 ~ 7 的数字,例如 012,0765 等。
- 二进制整型常量:0b 或 0B 开头,接下来是 0 ~ 1 的数字,例如 0B1010101111001101,0b1111 等。C++ Builder 的 clang 编译器支持这样的常量。以前一直是 C++ 扩展常量,一直到 C++ 14 才定为标准。
2. 整型常量的后缀
C / C++ 整型常量的后缀可以表示是否有符号和位数
后缀 | 类型 | 说明 |
---|---|---|
u | unsigned int | 无符号整数,例如 50000u |
U | unsigned int | 无符号整数,例如 50000U |
l | long | 长整数,例如 123456l,0x1234abcdl |
L | long | 长整数,例如 123456L,0X1234ABCDL |
ul | unsigned long | 无符号长整数,例如 800ul,0x7890ul |
UL | unsigned long | 无符号长整数,例如 800UL,0X7890UL |
ll | long long | 64位长整数,例如 123ll,0x1234ll |
LL | long long | 64位长整数,例如 123LL,0x1234LL |
ull | unsigned long long | 无符号位64长整数,例如 12ull,0xfull |
ULL | unsigned long long | 无符号位64长整数,例如 12ULL,0xFULL |
四. 扩展 C / C++ 整型常量
后缀 | 类型 | 例子 |
---|---|---|
i8 | __int8 | 120i8,0x12i8 |
I8 | __int8 | 60I8,0x60i8 |
ui8 | unsigned __int8 | 210ui8,0xAAui8 |
UI8 | unsigned __int8 | 200UI8,0xDDUI8 |
i16 | __int16 | 1234i16,0x1abci16 |
I16 | __int16 | 4567I16,0X1234I16 |
ui16 | unsigned __int16 | 43210ui16,0xabcdui16 |
UI16 | unsigned __int16 | 33333UI16,0XDCBAUI16 |
i32 | __int32 | 11111i32,0x123i32 |
I32 | __int32 | 22222I32,0x456I32 |
ui32 | unsigned __int32 | 33333ui32,0X7890ui32 |
UI32 | unsigned __int32 | 44444UI32,0x8765UI32 |
i64 | __int64 | 567890i64,0xAAAAi64 |
I64 | __int64 | 654321I64,0xccccI64 |
ui64 | unsigned __int64 | 88888ui64,0x1234Aui64 |
UI64 | unsigned __int64 | 99999UI64,0x4567fui64 |
i128 | __int128 | 55555i128,0xfedcbai128 |
I128 | __int128 | 66666I128,0xe1234i128 |
ui128 | unsigned __int128 | 77777ui128,0x1abcui128 |
UI128 | unsigned __int128 | 88888UI128,0x987ui128 |
五. 标准 和 整型变量
如果要跨平台,C++ 标准建议使用
是新版本头文件,老版本头文件是 里面的类型在 std 命名空间里面
类型 | 说明 |
---|---|
int8_t | 8位整型 |
int16_t | 16位整型 |
int32_t | 32位整型 |
int64_t | 64位整型 |
uint8_t | 8位无符号整型 |
uint16_t | 16位无符号整型 |
uint32_t | 32位无符号整型 |
uint64_t | 64位无符号整型 |
int_fast8_t | 至少8位的访问速度最快的整型 |
int_fast16_t | 至少16位的访问速度最快的整型 |
int_fast32_t | 至少32位的访问速度最快的整型 |
int_fast64_t | 至少64位的访问速度最快的整型 |
uint_fast8_t | 至少8位的访问速度最快的无符号整型 |
uint_fast16_t | 至少16位的访问速度最快的无符号整型 |
uint_fast32_t | 至少32位的访问速度最快的无符号整型 |
uint_fast64_t | 至少64位的访问速度最快的无符号整型 |
int_least8_t | 至少8位的最小的整型 |
int_least16_t | 至少16位的最小的整型 |
int_least32_t | 至少32位的最小的整型 |
int_least64_t | 至少64位的最小的整型 |
uint_least8_t | 至少8位的最小的无符号整型 |
uint_least16_t | 至少16位的最小的无符号整型 |
uint_least32_t | 至少32位的最小的无符号整型 |
uint_least64_t | 至少64位的最小的无符号整型 |
intmax_t | 最大位数的整型 |
uintmax_t | 最大位数的无符号整型 |
intptr_t | 在32位程序里面是32位整型,在64位程序里面是64位整型, 是适合于储存指针 (地址) 或句柄的整型 |
uintptr_t | 在32位程序里面是32位无符号整型,在64位程序里面是64位无符号整型, 是适合于储存指针 (地址) 或句柄的无符号整型 |
是新版本头文件,老版本头文件是 里面的类型在 std 命名空间里面
类型 | 说明 |
---|---|
size_t | 无符号整数,sizeof 的返回值的类型,占用内存空间字节数 |
ptrdiff_t | 有符号整数,两个指针 (内存地址) 相减得到的有符号整数的类型 |
六. 标准 整型常量值
常数值 | 说明 | 值 |
---|---|---|
INT8_MIN | int8_t 最小值 | -128 |
INT16_MIN | int16_t 最小值 | -32768 |
INT32_MIN | int32_t 最小值 | -2147483648 |
INT64_MIN | int64_t 最小值 | -9223372036854775808 |
INT8_MAX | int8_t 最大值 | 127 |
INT16_MAX | int16_t 最大值 | 32767 |
INT32_MAX | int32_t 最大值 | 2147483647 |
INT64_MAX | int64_t 最大值 | 9223372036854775807 |
UINT8_MAX | uint8_t 最大值 | 255 |
UINT16_MAX | uint16_t 最大值 | 65535 |
UINT32_MAX | uint32_t 最大值 | 4294967295 |
UINT64_MAX | uint64_t 最大值 | 18446744073709551615 |
INT_LEAST8_MIN | int_least8_t 最小值 | -128 |
INT_LEAST16_MIN | int_least16_t 最小值 | -32768 |
INT_LEAST32_MIN | int_least32_t 最小值 | -2147483648 |
INT_LEAST64_MIN | int_least64_t 最小值 | -9223372036854775808 |
INT_LEAST8_MAX | int_least8_t 最大值 | 127 |
INT_LEAST16_MAX | int_least16_t 最大值 | 32767 |
INT_LEAST32_MAX | int_least32_t 最大值 | 2147483647 |
INT_LEAST64_MAX | int_least64_t 最大值 | 9223372036854775807 |
UINT_LEAST8_MAX | uint_least8_t 最大值 | 255 |
UINT_LEAST16_MAX | uint_least16_t 最大值 | 65535 |
UINT_LEAST32_MAX | uint_least32_t 最大值 | 4294967295 |
UINT_LEAST64_MAX | uint_least64_t 最大值 | 18446744073709551615 |
INT_FAST8_MIN | int_fast8_t 最小值 | -128 |
INT_FAST16_MIN | int_fast16_t 最小值 | -32768 |
INT_FAST32_MIN | int_fast32_t 最小值 | -2147483648 |
INT_FAST64_MIN | int_fast64_t 最小值 | -9223372036854775808 |
INT_FAST8_MAX | int_fast8_t 最大值 | 127 |
INT_FAST16_MAX | int_fast16_t 最大值 | 32767 |
INT_FAST32_MAX | int_fast32_t 最大值 | 2147483647 |
INT_FAST64_MAX | int_fast64_t 最大值 | 9223372036854775807 |
UINT_FAST8_MAX | uint_fast8_t 最大值 | 255 |
UINT_FAST16_MAX | uint_fast16_t 最大值 | 65535 |
UINT_FAST32_MAX | uint_fast32_t 最大值 | 4294967295 |
UINT_FAST64_MAX | uint_fast64_t 最大值 | 18446744073709551615 |
INTPTR_MIN | intptr_t 最小值 | -9223372036854775808 或 -2147483648 |
INTPTR_MAX | intptr_t 最大值 | 9223372036854775807 或 2147483647 |
UINTPTR_MAX | uintptr_t 最大值 | 18446744073709551615 或 4294967295 |
INTMAX_MIN | intmax_t 最小值 | -9223372036854775808 |
INTMAX_MAX | intmax_t 最大值 | 9223372036854775807 |
UINTMAX_MAX | uintmax_t 最大值 | 18446744073709551615 |
PTRDIFF_MIN | ptrdiff_t 最小值 | -9223372036854775808 或 -2147483648 |
PTRDIFF_MAX | ptrdiff_t 最大值 | 9223372036854775807 或 2147483647 |
七. Windows API 整型变量
类型 | 说明 |
---|---|
CHAR | 字符类型 char |
INT8 | 有符号的8位整数 signed char |
UCHAR | 无符号的字符类型 unsigned char |
UINT8 | 无符号的8位整数 unsigned char |
BYTE | 字节 unsigned char |
SHORT | 有符号短整数 short |
INT16 | 有符号的16位整数 signed short |
USHORT | 无符号的短整数 unsigned short |
UINT16 | 无符号的16位短整数 unsigned short |
WORD | 字 unsigned short |
INT | 整数 int |
INT32 | 有符号的整数 signed int |
UINT | 无符号的整数 unsigned int |
UINT32 | 无符号的32位整数 unsigned int |
LONG | 有符号的长整数 long |
ULONG | 无符号的长整数 unsigned long |
DWORD | 双字 unsigned long |
LONGLONG | 有符号的长的长整数 __int64 |
LONG64 | 有符号的64位的长整数 __int64 |
INT64 | 有符号的64位整数 signed __int64 |
ULONGLONG | 无符号的长的长整数 unsigned __int64 |
DWORDLONG | 四字 unsigned __int64 |
ULONG64 | 无符号的64位整数 unsigned __int64 |
DWORD64 | 四字 unsigned __int64 |
UINT64 | 无符号的64位整数 unsigned __int64 |
INT_PTR | 有符号的适合储存指针 (地址) 的整数 intptr_t |
UINT_PTR | 无符号的适合储存指针的整数 uintptr_t |
LONG_PTR | 有符号的适合储存指针 (地址) 的整数 intptr_t |
ULONG_PTR | 无符号的适合储存指针的整数 uintptr_t |
DWORD_PTR | 无符号的适合储存指针的整数 uintptr_t |
SSIZE_T | 有符号的整数,和 size_t 位数相等 |
SIZE_T | 无符号的整数,size_t |
八. C++ Builder 扩展整型变量
类型 | 说明 |
---|---|
NativeInt | 兼容 Delphi 类型,C++ 类型为 intptr_t |
NativeUInt | 兼容 Delphi 类型,C++ 类型为 uintptr_t |
九. C++ Builder 整型异常
C++ Builder 在处理整数的时候,只有被零除能够抛出异常:EDivByZero,其他情况,比如溢出了不抛出异常,高位丢失。
例1:溢出的例子
void __fastcall TForm1::Button1Click(TObject *Sender)
{
long x = 6789012;
short d = x;
unsigned char c = d;
UnicodeString s;
s.cat_sprintf(L"x = %ld\r\n", x);
s.cat_sprintf(L"d = %d\r\n", d);
s.cat_sprintf(L"c = %d\r\n", c);
Memo1->Text = s;
}
运行结果:
十进制 6789012 等于十六进制 0x679794,
给 short 赋值的时候,高位丢失,剩下 0x9794,等于十进制 -26732,
给 unsigned char 赋值的时候,高位丢失,剩下 0x94,等于十进制 148。
例2:被零除的例子
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
int a = 100;
int b = 0;
int x = a / b;
Memo1->Lines->Add(L"x = " + IntToStr(x));
}
catch(Exception &E)
{
Memo1->Lines->Add(E.ClassName());
Memo1->Lines->Add(E.Message);
}
}
运行结果:
运算 100 / 0 抛出整数被零除的异常 EDivByZero,异常的描述为 "Division by zero"。
相关:
- C++ Builder 的枚举类型
- C++ Builder 浮点型变量和浮点型常量
- C++ Builder 的字符串类型、字符类型、字符编码
C++ Builder 参考手册 ➙ C++ Builder 整型变量和整型常量