程式設計師面試題精選100題(55)-不用+、-、×、÷數字運算子做加法
阿新 • • 發佈:2019-02-14
方法一:
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]; }