您的位置:首页 > 职场人生

程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法

2011-10-30 18:16 302 查看
方法一:

5的二进制是101,17的二进制10001。还是试着把计算分成三步:第一步各位相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10。这一步不计进位,因此结果仍然是0);第二步记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10;第三步把前两步的结果相加,得到的结果是10110,正好是22。由此可见三步走的策略对二进制也是管用的。

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)
{
char * c;
c = (char *) a;
return (int)&c[b];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐