1. 程式人生 > >10 c語言中整型int,long,long long範圍及原碼補碼錶示

10 c語言中整型int,long,long long範圍及原碼補碼錶示

 以2位元組為例來說:

對於無符號的數值(原碼及補碼都一樣),最小值是0,最大值是1111  1111  1111  1111=216-1=65535,共216個編碼。

對於有符號的來說較為複雜:

1)原碼錶示

最大值:0111  1111  1111  1111=215-1=32767

最小值:1111  1111  1111  1111=-215-1=-32767

正0和負0:0000000000000000=1000000000000000=0

因為有兩個0的存在,所以共有216個編碼。

但是計算機採用二進位制補碼儲存資料。

1)補碼錶示

最大值:0111  1111  1111  1111=215-1=32767

負數需要把除符號位以後的部分取反加一,即-32767的補碼為1000  0000  0000  0001

正0:0000  0000  0000  0000,負0:經過非符號位取反1111  1111  1111  1111)加1後,同樣變成了0000  0000  0000  0000,也就是說正0和負0在補碼系統中編碼是一樣的。因為16位二進位制數可以表示216個編碼,所以補碼需要比原碼多一個數編碼出來,這個數為-32768,編碼為1000000000000000。所以補碼系統中,範圍是-3276832767

整型範圍:

unsigned int   0~2^32-1=0~4294967295

int     -2^31~2^31-1=-2147483648~2147483647 

unsigned long      0~2^32-1=0~4294967295

long      -2^31~2^31-1=-2147483648~2147483647 

unsigned long long     0~2^64-1=0~1844674407370955161

long long      -2^63~2^63-1=-9223372036854775808~9223372036854775807

unsigned  __int64     0~2^64-1=0~1844674407370955161

__int64       -2^63~2^63-1=-9223372036854775808~9223372036854775807