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。所以補碼系統中,範圍是-32768~32767。
整型範圍:
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