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閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容