題目一:兩整數之和
給你兩個整數
a和b,不使用 運算子+和-,計算并回傳兩整數之和,

兩整數之和
首先,在不給用加法的情況,我們可以想到位運算,既然是兩個數的運算,我們可以先假設a=3,
b=5,(所假設的數字補碼同一位必須都是1的情況,不然考慮不全面)然后對這兩數分別進行位運算,你會發現,異位是最接近的

兩位為1變0,但沒進位,接下來就要考慮進位,找到都為一的位數,那么就是按位與了,將按位與的往左挪一,再按位或,這就是此題解法
int getSum(int a, int b){
int c;
while(b)
{
c=(unsigned int)(a&b)<<1;
a^=b;
b=c;
}
return a;
}


此題圖解,必須定義c變數否則異或的不是上一輪b的值,
2.遞回乘法
遞回乘法, 寫一個遞回函式,不使用 * 運算子, 實作兩個正整數的相乘,可以使用加號、減號、位移,但要吝嗇一些,
遞回乘法
既然能使用+-號,那么就不需要位運算了(位運算太難想了),我們就用乘法的本質,一個數×幾就等于幾個這樣的數相加
int multiply(int A, int B){
if(B>0)
return multiply(A,B-1)+A;
return 0;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376985.html
標籤:其他
