不使用’ – ‘运算符减去两个数字

前端之家收集整理的这篇文章主要介绍了不使用’ – ‘运算符减去两个数字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用以下代码,但我无法理解为什么它给了我错误的答案.我正在计算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;
}

猜你在找的C&C++相关文章