对于8位类型,为什么表示为-128~127?
来源:互联网
对于一种8 bit类型,现在来看其整型值表示。对于unsigned型,取值范围是0 ~ 28-1,即0 ~ 255,共256个数值。对于signed类型,取值范围至少从-127 ~ 127,具体由编译器决定如何实现,大多数实现为-128 ~ 127。(为什么是-128 ~ 127?我这里瞎理解一下。首先-128 ~ 127正好是256(28)个数值。这种实现最常见的策略是最高位为符号位,符号位为1,值为负,符号位为0,值为正。本来是-0到-127,+0到+127。实际数值在内存中是以补码表示的,正数的补码与其原码(即该数的二进制形式)相同,+0到+127即0000 0000到0111 1111。负数的补码是其二进制形式的符号位不变,其他位取反再加1。所以-1到-127,其补码为1111 1111到1000 0001。现在还有一个-0,补码的0是没有正负的,所以+0就是0了,那-0呢?-127的补码是1000 0001,再往下是1000 0000。再来看-128,原码是1 1000 0000(最前面的符号位不再是最高位),符号位不变,其他位取反1 0111 1111,再加1,1 1000 0000,超出8位的最高位1舍弃,剩下1000 0000,所以补码1000 0000可以代表-128。所以最终没有-0,而是-128 ~ 127(共256个数值),对应的补码是1000 0000 到0000 0000再到0111 1111。)对于一种8 bit类型,现在来看其整型值表示。对于unsigned型,取值范围是0 ~&n