UINT
32位無符號整數
UINT類型在WINDOWS API中有定義,它對應於32位無符號整數。
minwindef.h中關於UNIT的定義
無符號整型(unsigned int):取值是 2^31 - 1,即:0~4294967295
就拿十進位的32767(以下的所有舉例均拿這個數字來說事了)來說,它的二進位為:
0111 1111 1111 1111
對於無符號的整型32767來說,它的二進位的最高位稱為數據位,即那個0就是數據位,數據位是要參與運算的,如果我們把0改成1,即16個1,它的十進位就是65535(就是2的15次方+2的14次方...一直加到2的0次方),這是不同於有符號整型的。
有無符號的根本原因可以說就是因為數據出現了溢出現象導致的。
無符號值可以避免誤存負數,且擴大了表示範圍。
如:
人 150 歲之內 unsigned tinyint 1 無符號值: 0 到 255。
龜 數百歲 unsigned smallint 2 無符號值: 0 到 65535。
恐龍化石 數千萬年 unsigned int 4 無符號值: 0 到約 42.9 億。
太陽 約 50 億年 unsigned bigint 8 無符號值: 0 到約 10 的 19 次方。
在C, C++中不存在UINT這個關鍵字
UINT類型是unsigned int派生出來的
int是帶符號的,表示範圍是:-2147483648 到 2147483647
uint是不帶符號整型,表示範圍是0到42949 67295(2^32-1),即第一個數字不表示符號
在C#中,uint 是關鍵字
表示一種整型,該類型根據下表顯示的大小和範圍存儲值
類型 | 範圍 | 大小 | .NET Framework 類型 |
uint | 0 到 4,294,967,295(2的32次方減一) | 無符號 32 位整數 | System..::.UInt32 |
在MFC中的解釋
在MFC中,Data Types關於UINT的解釋:
UINT A 16-bit unsigned integer on Windows versions 3.0 and 3.1; a 32-bit unsigned integer on Win32.
int類型比較特殊,具體的位元組數同機器字長和編譯器有關。如果要保證移植性,盡量用__int16 __int32 __int64吧
__int16、__int32這種數據類型在所有平台下都分配相同的位元組。所以在移植上不存在問題。
所謂的不可移植是指:在一個平台上編寫的代碼無法拿到另一個平台上運行時,不能達到期望的運行結果。
例如:在32為平台上(所謂32位平台是指通用寄存器的數據寬度是32)編寫代碼,int 類型分配4個位元組,而在16位平台是則分配2個位元組,那麼在16位上編譯出來的exe,其中是為int分配2位元組,而在32位平台上運行時,會按照4個位元組來解析,顯然會出錯誤的。
而對於非int行,目前為止,所有的類型分配的位元組數都是兼容的,即不同平台對於同一個類型分配相同的位元組數。
下面是各個類型一覽表,64位指的是cpu通用寄存器的數據寬度是64位的。
數據類型名稱 | 位元組數 | 別名 | 取值範圍 |
int | * | signed,signed int | 由操作系統決定,即與操作系統的"字長"有關 |
unsigned int | * | unsigned | 由操作系統決定,即與操作系統的"字長"有關 |
__int8 | 1 | char,signed char | –128 到 127 |
__int16 | 2 | short,short int,signed short int | –32,768 到 32,767 |
__int32 | 4 | signed,signed int | –2,147,483,648 到 2,147,483,647 |
__int64 | 8 | 無 | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
bool | 1 | 無 | false 或 true |
char | 1 | signed char | –128 到 127 |
unsigned char | 1 | 無 | 0 到 255 |
short | 2 | short int,signed short int | –32,768 到 32,767 |
unsigned short | 2 | unsigned short int | 0 到 65,535 |
long | 4 | long int,signed long int | –2,147,483,648 到 2,147,483,647 |
long long | 8 | none (but equivalent to __int64) | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long | 4 | unsigned long int | 0 到 4,294,967,295 |
enum | * | 無 | 由操作系統決定,即與操作系統的"字長"有關 |
float | 4 | 無 | 3.4E +/- 38 (7 digits) |
double | 8 | 無 | 1.7E +/- 308 (15 digits) |
long double | 8 | 無 | 1.7E +/- 308 (15 digits) |
wchar_t | 2 | __wchar_t | 0 到 65,535 |
類型標識符 | 類型說明 | 長度 (位元組) | 範圍 | 備註 |
char | 字元型 | 1 | -128 ~ 127 | -2~ (2-1) |
unsigned char | 無符字元型 | 1 | 0 ~ 255 | 0 ~ (2-1) |
short int | 短整型 | 2 | -32768 ~ 32767 | 2~ (2- 1) |
unsigned short int | 無符短整型 | 2 | 0 ~ 65535 | 0 ~ (2- 1) |
int | 整型 | 4 | -2147483648 ~ 2147483647 | -2~ (2- 1) |
unsigned int | 無符整型 | 4 | 0 ~ 4294967295 | 0 ~ (2-1) |
float | 實型(單精度) | 4 | 1.18*10~ 3.40*10 | 7位有效位 |
double | 實型(雙精度) | 8 | 2.23*10~ 1.79*10 | 15位有效位 |
long double | 實型(長雙精度) | 10 | 3.37*10~ 1.18*10 | 19位有效位 |