題目描述
寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。
算法描述:
如果我們將兩個整數相加看作兩步位運算即可,舉個栗子,19 + 31,二進制為0001_0011 + 0001_1111, 我們先不考慮進位的加法,其實在位運算上和異或相同,則sum = 0001_0011 ^ 0001_1111 = 0000_1100,同時計算進位carry = 0001_0011 & 0001_1111 << 1 = 0010_0110,第二步就將sum 和 carry進行加法操作,直到最后沒有進位的時候,加法完成。
代碼如下:
public int Add(int num1, int num2) { int sum, carry; do { sum = num1 ^ num2; carry = (num1 & num2) << 1; num1 = sum; num2 = carry; } while (num2 != 0); return num1; }新聞熱點
疑難解答