不用+、-、×、÷做加法

来自:http://zhedahht.blog.163.com/

其中有一题是:不用+、-、×、÷做加法。

楼主给出了位运算方法,如下:

int AddWithoutArithmetic(int num1, int num2) {
  // 利用异或,与操作,递归调用
  if (num2 == 0) 
    return num1;

  int sum = num1 ^ num2;
  int carry = (num1 & num2) << 1;
  return AddWithoutArithmetic(sum, carry);
}

后面网友给出了另外一种巧妙方法,利用地址偏移实现加法,代码如下:

int Add(int a,int b) {
  // 把a理解为首地址,b理解为偏移量
  // a b为负数也能执行
  char *c;
  c = (char *)a;
  return &c[b];
}

特此mark

猜你喜欢

转载自blog.csdn.net/hbuxiaoshe/article/details/46980907