-
unsigned int
鎖定
- 取值範圍
- 0~4294967295(32位) [4]
- 屬 性
- 整型數據 [3]
- 關聯數據類型
- char、short、long、long long [3]
目錄
- 1 unsigned int數據類型
- ▪ 定義
- ▪ 取值範圍
- 3 注意事項
- ▪ 整數溢出
- ▪ 切勿混用帶符號類型和無符號類型
unsigned intunsigned int數據類型
unsigned int定義
unsigned int取值範圍
數據類型 | 位數 | 取值範圍 |
---|---|---|
unsigned int | 16 | 0 到 65535 |
32 | 0 到 4294967295 |
unsigned int應用舉例
unsigned int16位系統中的unsigned int
16位系統中一個int能存儲的數據的範圍為:-32768~32767,而unsigned int能存儲的數據範圍則是0~65535。由於在計算機中,整數是以補碼形式存放的。所以如果整數的最高位是1,有符號數的話就是負數;如果是無符號數,則都表示正數。另外,unsigned若省略後一個關鍵字,大多數編譯器都會認為是unsigned int。
[3]
unsigned intMySQL中的unsigned int
CREATE TABLE mysql.ndb_replication ( ... server_id INT UNSIGNED, ... }
unsigned int注意事項
unsigned int整數溢出
#include <stdio.h> int main() { int i = 2147483647; unsigned int j = 4294967295; printf("%d %d %d\n", i, i+1, i+2); printf("%u %u %u\n", j, j+1, j+2); return 0; } //程序執行結果: 2147483647 -2147483648 -2147483647 4294967295 0 1
由以上結果可知,unsigned int溢出後數值回到“起始點”0,而int溢出後數值回到“起始點”-2147483648。應當注意的是,當變量溢出時,系統並沒有給出提示,所以編程時需要程序員自己處理這個問題。
[3]
unsigned int切勿混用帶符號類型和無符號類型
如果表達式裏既有帶符號類型又有無符號類型,當帶符號類型取值為負時會出現異常結果,這是因為帶符號數會自動地轉換成為無符號數。例如一個形如 a*b 的式子中,如果 a=-1,b=1,而且a,b都是int類型,則表達式的值顯然為-1,然而如果a是int,而b是unsigned int,則結果須視在當前機器上int所佔位數而定,在32位計算機系統中,結果是4294967295。
[2]
- 參考資料
-
- 1. (美)Brian W. Kernighan,(美)Dennis M. Ritchie著;徐寶文,李志譯.C程序設計語言[M].北京:機械工業出版社,2004:27-28
- 2. (美)李普曼,(美)拉喬伊,(美)默著;王剛,楊巨峯譯.C++ Primer 中文版 第5版[M].北京:電子工業出版社,2013:29-32
- 3. (美)Stephen Prata著;雲巔工作室譯.C Primer Plus 第5版 中文版[M].北京:人民郵電出版社,2005:34-53
- 4. Fundamental types .cppreference.com[引用日期2020-05-02]
- 5. NDB Cluster Replication Conflict Resolution .MySQL 5.7 Reference Manual[引用日期2020-05-02]
- 6. Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .MySQL 5.7 Reference Manual[引用日期2020-05-02]