無符號整數

無符號整數

計算機里的數是用二進制表示的,最左邊的這一位一般用來表示這個數是正數還是負數,這樣的話這個數就是有符號整數。如果最左邊這一位不用來表示正負,而是和後面的連在一起表示整數,那么就不能區分這個數是正還是負,就只能是正數,這就是無符號整數。

概念

計算機里的數是用二進制表示的,最左邊的這一位一般用來表示這個數是正數還是負數,這樣的話這個數就是有符號整數。如果最左邊這一位不用來表示正負,而是和後面的連在一起表示整數,那么就不能區分這個數是正還是負,就只能是正數,這就是無符號整數。

有符號整數和無符號整數差別

int是有符號的。

unsigned才是無符號的。

它們所占的位元組數其實是一樣的,但是有符號的需要安排一個位置來表達我這個數值的符號是什麼,因此它說能表示的絕對值就要比無符號的少一半。舉個例子,我們有一個1個位元組的整數(雖然這種類型不存在),那么無符號的就是這樣:00000000~11111111 這個就是無符號的範圍。

一個位元組是8位。 下面有符號的,因為第一個位要用來表示符號,那么就只剩下7個位置可以用來表示數了0000000~1111111因為有符號所以還可以:-1111111~00000000。

編程

c語言無符號整數怎么定義

整形變數的分類: 基本整形:int 短整形:short int 長整形:long int對以上三類加上修飾符unsigned以指定是“無符號數”。如果加上修飾符singed,則指定的是“有符號數”,如果既不指定為signed也不指定是unsigned,則隱含為有符號(singed)。

無符號整數的陷阱

請問以下代碼的輸出?

unsigned int a=1,

int b=-2; int c=-2;

cout<<0)

cout<<

運行結果:

4294967294

4294967295

Press any key to continue

首先,程式的第一行,變數b和a一樣,都是無符號整形,這是一個陷阱。

其次,在32位系統中,int的範圍是-2147483648~+2147483647,而unsigned int的範圍是0~4294967295。複數在無符號整形中用補碼錶示,所以b是4294967294。

第三,int默認為signed int,它與unsigned int運算時,結果被轉換為unsigned int,所以a是4294967295。

熱門詞條

聯絡我們