如果我有两个正整数,比如0x1234和0x5678,则为0x8765 + 0xfedc = 0x8641,如果'+'表示两个补码加,mod 2 ^ 16?
答案 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)是: