定義
無符號數是針對二進制來講的,無符號數的表數範圍是非負數。
全部二進制均代表數值,沒有符號位。即第一個"0"或"1"來表示正負。
無符號數與有符號數相對
C支持所有整形數據類型的有符號數和無符號數運算。儘管C標準並沒有指定某種有符號數的表示,但是幾乎所有的機器都使用二進制補碼。通常,大多數數字默認都是有符號的,C也允許無符號數和有符號數之間的轉換,轉換原則是基本的位表示保持不變。因此在一台二進制補碼機器上,當從無符號數轉換為有符號數時,效果就是套用U2Tw,而從有符號轉換為無符號數時,就是套用函式T2Uw,其中w表示數據類型的位數。
T2Uw(x) = (x<0)?(x+2w) :x;U2Rw(x) = (x<2w-1)?x:(x-2w);
當執行一個運算時,如果它的一個運算數是有符號的而另一個是無符號的,那么C會隱含地將有符號參數強制轉換為無符號數,並假設這兩個數都是非負的,來執行這個運算。
無符號數
指整個機器字長的全部二進制位均表示數值位,相當於數的絕對值。若機器字長為n+1位,則數值表示為:
X=X0X1X2...Xn 其中Xi={0,1},0<=i<=n 即X0*2^n + X1*2^(n-1) + X2*2^(n-2) + ... + Xn-1*2 + Xn
數值範圍是 0≤X≤2^(n+1) - 1
例如:1111表示15。
帶符號數
最高位被用來表示符號位,而不再表示數值位。
例如:1111 是-7。