如果我有两个正整数,比如0x1234和0x5678,那么0x8765 + 0xfedc = 0x8641,如果'+‘意味着2的补码相加,mod 2^16?
发布于 2010-03-14 08:24:54
因为2的补码是存储负数的一种方式,所以没有“正数的2补码相加”这样的东西:-n被存储为~n + 1,这相当于2^w -n,其中w是整数类型的宽度。
二的补码是为模2^w算术设计的:(+a) + (-b)表示为a+ (2^w - b) = ( a - b ) + 2^w,这在模2^w归约后给出了a- b的正确答案。类似地,( -a ) + (-b)表示为(2^w - a) + (2^w - b) = (-a - b) +2* 2^w,它简化为预期的-a-b。
发布于 2010-03-14 07:44:13
这个问题非常模糊。这就是说:
在位级上,二进制补码加法等价于无符号整数的模加法。唯一的区别在于如何解释输入和结果的位模式。
这意味着,如果有两个正的16位二进制补码数a和b,则twos_complement_add(a,b)为:
https://stackoverflow.com/questions/2440372
复制相似问题