我尝试使用以下代码,但我无法理解为什么它给了我错误的答案.我正在计算2的补码并加上另一个补.
#include <stdio.h> int add(int a,int b) { while (a) { a = (a & b) << 1; b = a^b; } return b; } int sub(int a,int b) // add a with b's 2's complement. { return (add(a,add(~b,1))); } int main() { int a,b,res; a = 3,b = 1; res = sub(a,b); printf("%d\n",res); return 0; }
解决方法
我使用了NullUserException建议的不同的add()函数,它现在可以工作:
int add(int a,int b) { int x; x = a^b; while(a&b) { b = ((a&b)<<1); a = x; x = a^b; //b=(a^b); } return x; }