首先,小编的理解(以前学c语言就是这样理解的,老谭(谭浩强)那本书上讲整数的取值范围那段就有):
8位二进制的原值表达范围为:-127至127
共有256个组合序列 0000 0000 至1111 1111 。
+128的原值在8位中是表达不出来的。
(1)从数学层面上去理解:
从数学上计算 256-128=128,
因为:256-128=256+(-128)的补码
而 256-128=128
所以 256+(-128)的补码=128
所以 (-128)的补码=256-128
=128
而从数学上, 128=1000 0000
故规定-128的补码为 1000 0000
所以说,128在8位内存中是表达不出来的。
不存在+128 8位原码及反码的形式,按常规算法是不对的。
注意:只是规定而已,下面还有原因。
(2)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个
再看看这个规律表
……补码不断-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的补码
这种办法算出的结果符合“规定值”,规定而已。
另外一种解释:
1.
-127补+(-1补)=-128补
-127原=,-127补=
-1补=
+=,这就是-128补
2.
127+1=128,正数溢出,不能表示,用-128的补码表示
127补=0, 1补 = 00000001
127补 + 1补=
0+00000001=,
这就是-128补码
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/16863.html