C++ Builder 整型变量和整型常量

C++ Builder 参考手册C++ Builder 整型变量和整型常量


  • 标准 C / C++ 整型变量
  • 扩展 C / C++ 整型变量
  • 标准 C / C++ 整型常量
  • 扩展 C / C++ 整型常量
  • 标准 <cstdint> 和 <cstddef> 整型变量
  • 标准 <cstdint> 整型常量值
  • 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

五. 标准 <cstdint> 和 <cstddef> 整型变量

如果要跨平台,C++ 标准建议使用 <cstdint> 和 <cstddef> 里面的整数变量类型:

  • <cstdint> 是新版本头文件,老版本头文件是 <stdint.h>
  • <cstdint> 里面的类型在 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位无符号整型,
是适合于储存指针 (地址) 或句柄的无符号整型
  • <cstddef> 是新版本头文件,老版本头文件是 <stddef.h>
  • <cstddef> 里面的类型在 std 命名空间里面
类型 说明
size_t 无符号整数,sizeof 的返回值的类型,占用内存空间字节数
ptrdiff_t 有符号整数,两个指针 (内存地址) 相减得到的有符号整数的类型

六. 标准 <cstdint> 整型常量值

常数值 说明
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 整型变量和整型常量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容