pra*_*nay 7 c bit-manipulation
我尝试使用以下代码,但我无法理解为什么它给了我错误的答案.我正在计算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;
}
Run Code Online (Sandbox Code Playgroud)
我使用了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;
}
Run Code Online (Sandbox Code Playgroud)