黑马程序员技术交流社区

标题: 【求教】byte占一个字节,范围为-128—127,-128是怎么算来的 [打印本页]

作者: fighting2016    时间: 2016-2-27 16:30
标题: 【求教】byte占一个字节,范围为-128—127,-128是怎么算来的
本帖最后由 fighting2016 于 2016-2-27 16:31 编辑

【求教】byte占一个字节,范围为-128—127,关于-128是怎么算来的?

作者: 陌城    时间: 2016-2-27 16:47
本帖最后由 陌城 于 2016-2-27 16:49 编辑

二进制的运算是根据补码来运算的 ,正数的补码是它本身
所以127的补码也就是他本身0111 1111,,也就是一个字节最大能表示的
而负数的补码是正数取反+1,
-1的补码就是1取反是1111 1110,加1就是1111 1111(补码),
-2的补码是1111 1110,以此类推-127的补码是1000 0001,
那么就多出来一个数补码为1000 0000,也就是负0,印度人就用它来表示-128了
作者: cumtbao    时间: 2016-2-27 17:29
-2的七次方,1000 0000负数最高位为符号位,也可以作为数值位
作者: 木小乐    时间: 2016-2-27 18:32
看到楼主这个问题我也困惑了,就从网上找了找,感觉这个解释比较合理
8位二进的补码组合序列有
0000 0000 - 0111 1111      0  ~ +127
1000 0000                          用来干啥好呢?(表示-0,不是的,-0的原码是1000 0000 补码是
                                           0000 0000  +0 的补码也是 0000 0000)
                                          
1000 0001  ~  1111 1111  -1  ~  -127
全部状态为256个
再看看这个规律表
    原码              补码          值
0111 1111   0111 1111    127
0111 1110   0111 1110    126
..................补码不断-1...............
0000 0000   0000 0000     0
1000 0001   1111 1111    -1
1000 0010   1111 1110    -2
1000 0011   1111 1101    -3
......补码不断-1........
1111 1111   1000 0001    -127
无法表达      1000 0000    -128


于是就有了规定 1000 0000 定为 -128的补码这样规定后,负数的补码在机器中就好算了。
在约定的范围内(-128  ~  +127,对16位32位64位等扩大范围)
先将该负数取绝对值,再用二进制表示出这个绝对值 (不管符号位
对该二进制数进行取反加一操作就得到负数的补码了
-128 绝对值是 128
128的二进制表示为:
1000 0000
取反
0111 1111
加1
1000 0000
这就是-128的补码
这种办法算出的结果符合“规定值”,规定而已。

作者: fighting2016    时间: 2016-4-3 21:45
陌城 发表于 2016-2-27 16:47
二进制的运算是根据补码来运算的 ,正数的补码是它本身
所以127的补码也就是他本身0111 1111,,也就是一个 ...

印度人是什么鬼????




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2