为什么int是从-32768到32767而不是从-32767到32767呢?
有人的回答是这样的,我最后一块句话没看懂计算机用二进制表示负数是用的“补码法”,做法是正数按原码,负数用其相反数的反码加一。这种结果用-32768代替了“-0”,可以使符...
有人的回答是这样的,我最后一块句话没看懂
计算机用二进制表示负数是用的“补码法”,做法是正数按原码,负数用其相反数的反码加一。
这种结果用-32768代替了“-0”,可以使符号位能与有效值部分一起参加运算,从而简化运算规则;同时使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
举例:
3的码值是 00000011,-3则为:11111100+1= 11111101
32767的码值是01111111,11111111(15个1),-32767是
10000000,00000000+1=10000000,00000001
-32768是01111111,11111111+1=10000000,00000000
最后-32768为什么是0111……这样开头的啊,应该是1开头的吧?!
像-32767也是1开头的,负数不应该是1开头的么? 展开
计算机用二进制表示负数是用的“补码法”,做法是正数按原码,负数用其相反数的反码加一。
这种结果用-32768代替了“-0”,可以使符号位能与有效值部分一起参加运算,从而简化运算规则;同时使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
举例:
3的码值是 00000011,-3则为:11111100+1= 11111101
32767的码值是01111111,11111111(15个1),-32767是
10000000,00000000+1=10000000,00000001
-32768是01111111,11111111+1=10000000,00000000
最后-32768为什么是0111……这样开头的啊,应该是1开头的吧?!
像-32767也是1开头的,负数不应该是1开头的么? 展开
1个回答
2013-09-25
展开全部
-32768的对应相反数是32768,它的二进制是1000000000000000,反码(按位取反)后是0111111111111111,再+1后变成1000000000000000。
-32767的对应相反数是32767,它的二进制是0111111111111111,反码(按位取反)后是1000000000000000,再+1后变成1000000000000001。
.
.
.
-1的对应相反数是1,,它的二进制是0000000000000001,反码(按位取反)后是1111111111111110,再+1后变成1111111111111111。
所以负数的表示范围是从-32768到-1,正数不变还是0到32767,合起来就是-32768到32767了。
-32767的对应相反数是32767,它的二进制是0111111111111111,反码(按位取反)后是1000000000000000,再+1后变成1000000000000001。
.
.
.
-1的对应相反数是1,,它的二进制是0000000000000001,反码(按位取反)后是1111111111111110,再+1后变成1111111111111111。
所以负数的表示范围是从-32768到-1,正数不变还是0到32767,合起来就是-32768到32767了。
追问
第一位不是符号位吗?为什么要反?如果是这样,为什么那样子最小?!
追答
取反是补码的计算方法,最终还是保证负数的第一位是1的啊。
仔细想一下,1000000000000000表示-32768,一直到1111111111111111表示-1,是不是第一位都是1,不正好都是负数没错吗?
其实就是0这个数,因为把0归到了正数部分,所以正数就少一个。从0到32767共有32768个数,从-32768到-1也有32768个数;而16位的int总共可以表示的数的个数是65536个,正好。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询