C語言中int的取值範圍是怎麼算出來的

2021-05-28 16:08:29 字數 845 閱讀 9529

這得從二進位制的原碼說起:

如果以最高位為符號位,二進位制原碼最大為0111111111111111=2的15次方減1=32767

最小為1111111111111111=-2的15次方減1=-32767

此時0有兩種表示方法,即正0和負0:0000000000000000=1000000000000000=0

所以,二進位制原碼表示時,範圍是-32767~-0和0~32767,因為有兩個零的存在,所以不同的數值個數一共只有2的16次方減1個,比16位二進位制能夠提供的2的16次方個編碼少1個。

但是計算機中採用二進位制補碼儲存資料,即正數編碼不變,從0000000000000000到0111111111111111依舊表示0到32767,而負數需要把除符號位以後的部分取反加1,即-32767的補碼為1000000000000001。

到此,再來看原碼的正0和負0:0000000000000000和1000000000000000,補碼表示中,前者的補碼還是0000000000000000,後者經過非符號位取反加1後,同樣變成了0000000000000000,也就是正0和負0在補碼系統中的編碼是一樣的。但是,我們知道,16位二進位制數可以表示2的16次方個編碼,而在補碼中零的編碼只有乙個,也就是補碼中會比原碼多乙個編碼出來,這個編碼就是1000000000000000,因為任何乙個原碼都不可能在轉成補碼時變成1000000000000000。所以,人為規定1000000000000000這個補碼編碼為-32768。

所以,補碼系統中,範圍是-23768~32767。

因此,實際上,二進位制的最小數確實是1111111111111111,只是二進位制補碼的最小值才是1000000000000000,而補碼的1111111111111111是二進位制值的-1

C語言int的取值範圍

c語言int的取值範圍 我們常常看到int取值範圍為 32768 32767,實際上int的取值範圍依賴於計算機系統,在16位機器中,int佔16位,其中一位為符號位,所以取值範圍為前面所說的 32768 32767 而在32位和64位機器中,int佔32位,取值範圍為 2147483648 214...

C語言中資料型別取值範圍

c語言中的資料型別有void char short int float double。由於void是空型別,因此以下主要介紹char short int float double的取值範圍。1 signed char 1個位元組,取值範圍 128 127。最大值為127容易理解,0111 0111,...

C語言 取值範圍

列印型別 u8 ds8 du16 d or hu s16 d or hd u32 us32 du64 llu s64 lld int dunsigned int ushort int d or hd long ldunsigned long lulong long lld unsigned long...