無符號整型

無符號整型

整型有無符號(unsigned)和有符號(signed)兩種類型,在默認情況下聲明的整型變數都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。

簡介


無符號整型和有符號整型的區別就是無符號類型可以存放的正數範圍比有符號整型中的範圍大一倍,因為有符號類型將最高位儲存符號,而無符號類型全都儲存數字。比如16位系統中一個int能存儲的數據的範圍為-32768~32767,而unsigned能存儲的數據範圍則是0~65535。在一些不可能取值為負數的時候,可以定義為unsigned,在一些底層的嵌入式編程的數據一般都是無符號的。

系統使用


無符號數只表示大小,有符號數最高位(二進位情況下最高位表示符號位),在同一操作系統下,有符號數和無符號數的最大數值在大小上的關係是2*x+1(x表示有符號數的最大值,2*x+1表示無符號數最大值)。二者表示的數據範圍大小是相同的,但是範圍不同。
無符號整型和有符號整型運算依據表示數據的最大值來定(也是計算機中混合數據類型運算的特點,兩個不同類型數據運算,會取能表示較大數據的類型作為運算類型),二者數據運算先將有符號整型轉換成無符號整型再通過無符號數運算規則來計算。數據如果超出了整型數據表示範圍,則用比當前數據類型大的最小數據類型來表示。
在對應的帶符號整型前面加上unsigned,也就是unsigned int、unsigned short、unsigned long、unsigned long long。其中unsigned int可以直接寫為unsigned。 }無符號整型不能存儲負數,但存儲的最大值可以擴大一倍,例如unsigned的範圍就是0~232-1。