来自: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