1. 程式人生 > >程式設計師面試題精選100題(55)-不用+、-、×、÷數字運算子做加法

程式設計師面試題精選100題(55)-不用+、-、×、÷數字運算子做加法

方法一:

5的二進位制是10117的二進位制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]; }