1. 程式人生 > >在C語言中,int型資料的取值範圍?

在C語言中,int型資料的取值範圍?

在C語言中,int型資料所佔的位元組和具體的編譯器有關,32位編譯器int佔4個位元組(VC,C-free),16位編譯器int佔2個位元組(詳見“int型資料所佔位元組和什麼有關”)。

以兩個位元組為例:

在C中,int型資料是一個有符號的整型資料,其最高位為符號位(0表示正,1表示負)

1個位元組等價於8個二進位制位,在很多計算機系統中,通常採用補碼來表示帶符號的數(補碼系統)

現在從二進位制的原碼,反碼,補碼開始討論……

原碼:最高位為符號位(0表示正,1表示負),其他位按照一般的方法來表示數的絕對值

反碼:對於一個帶符號的書來說,正數的反碼與其原碼相同,負數的反碼為其原碼除符號位以外的各位按位取反

補碼:正數的補碼與其原碼相同,負數的補碼為其反碼在最低位加1

兩個位元組,所以,二進位制原碼最大為0111 1111 1111 1111 = 2^15 - 1 = 32767

                                               最小為1111 1111 1111 1111 = - (2^15 - 1) = -32767

原碼中0的表示有正負之分[+0] = 0000 0000 0000 0000;[-0]原 =1000 0000 0000 0000

所以二進位制原碼錶示時,範圍是 -32767 ~ -0和0~32767,因為有兩個0,所以不同的數值個數一共有2^16 - 1個

而計算機採用而進駐補碼儲存資料時,0的表示是唯一的:[+0] 

= [-0] = 0000 0000 0000 0000

此時正數編碼不變,從0000 0000 0000 0000 ~ 0111 1111 1111 1111依然表示0 ~ 32767,

       負數表示需依照補碼規則,即-32767的補碼為1000 0000 0000 0001

所以補碼中會比原碼多一個編碼出來,這個編碼就是1000 0000 0000 0000,因為任何一個原碼都不可能在轉化成補碼時變成1000 0000 0000 0000,所以人們規定1000 0000 0000 0000這個補碼編碼為-32768

綜上所述,int型資料佔兩個位元組時,可表示2^16種變化,最高位為符號位,所以正負有2^15中變化,因為0也佔一種,因此正負數的最大值並不對稱,即該int型資料取值範圍為-32768 ~ 32767