黑马程序员技术交流社区
标题:
【求教】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