有符号位的二进制数,在计算原码和补码时那个符号位是始终不变的吗?

2025-04-28 10:08:39
推荐回答(4个)
回答1:

  1. 对于无符号数而言,没有什么原码、反码、补码的概念,只有绝对值。

  2. 对于带符号数,才会有采用什么码型来表示的问题。10000000确实是-128的补码。对于带符号数,最高位是符号位,0表示正数、1表示负数,始终不变。所有的码型换算,都只针对低位的绝对值部分进行。

  3. 例如12的原码是00001100,-12的原码是10001100。对其绝对值部分0001100求反加1得1110100,最高位添上符号位1,就是补码11110100。

  4. 所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。

  5. 因为对于带符号数而言,真正的表示范围是-127~+127,这其中包含了两个0:+0(00000000)和-0(10000000)。而实际应用中,0是没有符号的,所以规定0用+0来表示,那么-0就是一个没有用的二进制码了,而对于低7位而言,模为128,那么128与0就是等值的,此时符号位是负的,于是规定-0就表示-128。这是人为规定。

回答2:

在计算机系统中,数值,一律采用补码表示和存储。

在计算机中,原码和反码,都是不存在的。

求补码,也用不着它们。

所以,原码和反码,根本就没有用!

符号位,更是无稽之谈。

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

补码,其实,就是一个“代替负数做运算”的正数。

且看 2 位 10 进制数的运算:

   25 - 1 = 24

   25 + 99 = (一百) 24

你舍弃进位,只取两位,这两种算法,功能就完全相同。

那么,+99,就代替了-1。加法,也就代替了减法。

这不就是“用正数(补数)代替了负数”吗?

求负数的补数,计算公式是: 补数 = 负数 + 10^n。

式中: n 是补数的位数。

   10^n 是 n 位 10 进制数的计数周期。

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

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

计算机所能计算的位数,是固定的,如八位机、16 位。。。

八位二进制是0000 0000~1111 1111 (十进制 255)。

八位二进制的计数周期,是:2^8 = 256。

求负数补码的计算公式,也是: 负数 + 周期。

-1 补码就是:-1 + 256 = 255 = 1111 1111(二进制)。

-2 补码就是:-2 + 256 = 254 = 1111 1110(二进制)。

。。。

-128 补码就是:128 = 1000 0000(二进制)。

正数,必须直接参加运算,不许转换。

所以,正数不存在补码。

求补码,根本就不用“原码反码符号位取反加一”这些烂事。

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

举例说明,用八位补码计算: 5 - 7 = -2。

       5  = 0000 0101

    -7 的补码= 1111 1001

--相加-------------

   得     (1)  1111 1110 = -2 的补码

舍弃进位,只保留八位,这就用加法,实现了 5-7。

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

在以上的讲解中,用到“符号位”了吗? 没有!

符号位,是在原码中定义的。反码也涉及到一点。

转到了补码,就不能再说什么符号位了。

而且,在计算机中,原码,也是根本就不存在的。

所以,符号位,只是他们臆想出来的,是虚无缥缈的。

回答3:

根本就不用费那么多事。

正数的补码,就是该数本身。

负数的补码,就用其正数,减一取反,就成可了。

例如,已知:+9 的补码是:0000 1001。

求-9 补码步骤如下:

 先减一:0000 1001-1 = 0000 1000。

 再取反,即得:-9 补码 = 1111 0111。

这不就完了吗?

原码反码符号位,这些,都是垃圾。

回答4:

对于无符号数而言,没有什么原码、反码、补码的概念,只有绝对值。
对于带符号数,才会有采用什么码型来表示的问题。10000000确实是-128的补码。对于带符号数,最高位是符号位,0表示正数、1表示负数,始终不变。所有的码型换算,都只针对低位的绝对值部分进行。
例如12的原码是00001100,-12的原码是10001100。对其绝对值部分0001100求反加1得1110100,最高位添上符号位1,就是补码11110100。
所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。