为什么int是从-32768到32767而不是从-32767到32767呢?

为什么int是从-32768到32767而不是从-32767到32767呢?
有人的回答是这样的,我最后一块句话没看懂
计算机用二进制表示负数是用的“补码法”,做法是正数按原码,负数用其相反数的反码加一.
这种结果用-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年前 已收到1个回答 举报

开着的鸟笼 幼苗

共回答了19个问题采纳率:84.2% 举报

-32768的对应相反数是32768,它的二进制是1000000000000000,反码(按位取反)后是0111111111111111,再+1后变成1000000000000000.
-32767的对应相反数是32767,它的二进制是0111111111111111,反码(按位取反)后是1000000000000000,再+1后变成1000000000000001.
.
.
.
-1的对应相反数是1,它的二进制是0000000000000001,反码(按位取反)后是1111111111111110,再+1后变成1111111111111111.
所以负数的表示范围是从-32768到-1,正数不变还是0到32767,合起来就是-32768到32767了.

1年前 追问

8

匿名- 举报

第一位不是符号位吗?为什么要反?如果是这样,为什么那样子最小?!

举报 开着的鸟笼

取反是补码的计算方法,最终还是保证负数的第一位是1的啊。 仔细想一下,1000000000000000表示-32768,一直到1111111111111111表示-1,是不是第一位都是1,不正好都是负数没错吗? 其实就是0这个数,因为把0归到了正数部分,所以正数就少一个。从0到32767共有32768个数,从-32768到-1也有32768个数;而16位的int总共可以表示的数的个数是65536个,正好。
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.027 s. - webmaster@yulucn.com