添加两个8位二进制补码二进制数

时间:2011-08-22 12:20:53

标签: binary numbers add

添加两个8位二进制补码1011101111010101的结果是什么(以8位二进制形式),你将如何计算?

2 个答案:

答案 0 :(得分:2)

这可能是任何体面的编程计算器都可以告诉你的东西,但假设它包裹在8位,这就是结果。

              [ hex,unsigned,signed]
     10111011 [0xBB,     187,   -69]
+    11010101 [0xD5,     213,   -43]
     --------
= (1)10010000 [0x90,     144,  -112]

您可以按如下方式手动执行此过程:

set carry to zero
for each position starting at right side, progressing left:
    set sum to carry
    add bit from position in first number to sum
    add bit from position in second number to sum
    if sum is greater than one:
        subtract two from sum
        set carry to one
    else
        set carry to zero
    end if
    store sum to position of result
end for

答案 1 :(得分:0)

关于两个补码的好处是你不需要知道你是否有有符号或无符号的数字。只需获取二进制表示,添加并丢弃溢出位。如果你已经离开了可表示数字的范围,那么,运气不好。但是添加两个负数并得到一个正数会引起怀疑。

实际注意事项:试图通过询问

之类的东西来防止C中的溢出
a = b+c;
if (((b > 0) && (a < c)) || ((b < 0) && (a > c))) {
  ...
}

这可能适用于标准调试版本,但允许C(和C ++)编译器优化此检查。 (对于无符号算术,if (a >= (a+b)) { ... }更常见,gcc -Wall会警告它知道它是假的。这很好,因为C标准说溢出是未定义的行为。)< / p>

我不知道有限范围整数类型的其他语言的情况如何。