-128的二进制补码是怎么得来的?

2024-11-08 11:33:59
推荐回答(3个)
回答(1):

10000000表示-128的补码,你可以理解为是一个特殊性。
各种8位二进制的表示法的数据范围如下:
原码:
-127
~
127
反码:
-127
~
127
补码:
-128
~
127
补码运算:正数为原码本身,负数为原码取反加一
127为正数,其补码为原码0111
1111
-127为负数,其补码为原码0111
1111,取反1000
0000,加一,1000
0001。
根据这情况来看,表示-0,不是的,-0的原码是1000
0000补码是0000
0000。+0的补码也是0000
0000
于是就有了规定
1000
0000
定为
-128的补码
这种定法和上面数学层面的表述是一致的。
这样规定后,负数的补码在机器中就好算了。
在约定的范围内(-128-+127,对16位32位64位等扩大范围)
先将该负数取绝对值,再用二进制表示出这个绝对值
(不管符号位)
对该二进制数进行取反加一操作就得到负数的补码了
-128
绝对值是
128
128的二进制表示为:
1000
0000
取反
0111
1111
加1
1000
0000
这就是-128的补码
这种办法算出的结果符合“规定值”,规定而已。

回答(2):

先看看补码的由来吧。

用十进制来说明,就比较好理解。

限定,使用 2 位 10 进制数:

  24 - 1 = 23

  24 + 99 = (一百) 23

忽略超出 2 位的进位一百,+99 和-1 就是等效的。

+99,就称为-1 的补数。

如果,可以使用 3 位数呢?

那么,-1 的补数,就是 +999。

负数的补数=负数 + 10^n, n 是位数。

-----------------------

计算机用二进制,补数,就改称为:补码

使用补码,就可以把减法,转换成加法运算,从而简化硬件。

8 位 2 进制的范围是:0000 0000 ~ 1111 1111 (十进制 255)。

-1 的补码,就是:-1 + 2^8 = 255 = 1111 1111(二进制)。

-2 的补码,就是:-2 + 256 = 254 = 1111 1110。

。。。

-128 的补码,是:-128 + 256 = 128 = 1000 0000。

负数的补码,就是这么来的。

补码,与原码反码毫无关系。

-----------------------

为什么是“取反、加一”?

下面用四位二进制来说明。

如果 X =-xxxx。

前面的负号(-)说明 X 是负数。后面的 x,是 1 或 0。

那么,[X]补 = -xxxx + 2^4

       = -xxxx + 1 0000。

式中的 1 0000,可以写成: 1 + 1111。

那么,[X]补 = 1111-xxxx + 1。

式中的 1111-xxxx:

  如果 x 是 0,1-x 就是 1。

  如果 x 是 1,1-x 就是 0。

  所以,这就是对 xxxx 取反。

式中的 + 1:

  就是在取反之后,再加上 1。

经过“取反、加一”就得到 X 的补码了。

注意:

 取反时,只是对 X 的绝对值 xxxx 取反。

 此时,既没有说到“原码”,也没有说“反码”。

 更没有说“符号位不变”。

 所以,补码,它就是补码。

 补码与“原码、反码和符号位”都没有关系。

回答(3):

-128 的二进制补码是怎么得来的?
-------------
你就算呗!
在八位机中,0 的补码就是:0000 0000。
-1,就是 0-1,你用二进制算一下,即可得到:1111 1111。
-2,二进制就是 0-10,你算一下,即可得到:1111 1110。
-3,二进制就是 0-11,你算一下,即可得到:1111 1101。
。。。
-128,二进制就是 0-1000 0000,算吧,即为:1000 0000。