是两个正数的补充加法与正常加法相同吗?

时间:2010-03-13 22:57:06

标签: math

如果我有两个正整数,比如0x1234和0x5678,则为0x8765 + 0xfedc = 0x8641,如果'+'表示两个补码加,mod 2 ^ 16?

2 个答案:

答案 0 :(得分:3)

没有“正数的两个补码”这样的东西,因为二的补码是一种存储负数的方式:-n存储为~n + 1,相当于2 ^ w - n,其中w是整数类型的宽度。

二进制补码是为模2 ^ w算术设计的:(+ a)+( - b)表示为+(2 ^ w - b)=(a - b)+ 2 ^ w,这给出了正确的减少模2 ^ w后的ab的答案。类似地,( - a)+( - b)表示为(2 ^ w - a)+(2 ^ w - b)=( - a - b)+ 2 * 2 ^ w,这减少到预期的-a - b。

答案 1 :(得分:1)

这个问题非常模糊。那说:

在位级别上,二进制补码相当于无符号整数的模数加法。唯一的区别在于您如何解释输入和结果的位模式。

这意味着如果你有两个正的16位二进制补码数a和b,那么twos_complement_add(a,b)是:

  • a + b if(a + b)< 2 ^ 15
  • a + b - 2 ^ 16否则
相关问题