本文參考自《劍指offer》一書,代碼采用Java語言。
題目
寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、×、÷四則運算符號。
思路
對數字做運算,除了四則運算外,只剩下位運算了。根據一般情況下的加法步驟,設計如下:
1)不考慮進位對每一位相加:1加0,0加1都等於1,而0加0,1加1等於0,所以使用異或^操作;
2)計算進位:只有1加1產生進位,所以采用位與&操作,再左移1位;
3)將和與進位相加,即重復前兩步操作。結束判斷為進位為0。
測試代碼
1.正負零
Java代碼
//題目:寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、×、÷ //四則運算符號。 public class AddTwoNumbers { public int add(int num1,int num2) { while(num2!=0){ int sum=num1^num2; //沒進位的和 int carry=(num1&num2)<<1; //進位 num1=sum; num2=carry; } return num1; } }
收獲
1.熟悉位操作的特性。二進制位運算的幾個用法
2.記住如何用位操作來進行數字的加減。