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



你可能感兴趣的:(基本算法)