java 用二進制實現兩個數的加法

*關于Java位運算可以參考之前的這篇文章: * http://www.lxweimin.com/p/6a181eb2bbcd

比如:求3與5的和,這里我們用二進制的位運算實現

思路是這樣的:

3轉為二進制為0011
5轉為二進制為0101
給定的數轉成二進制后:

  1. (位異或^)如果相同位不同則為1,相同位相同則為0:目的是將相加后不需要進位的取出;
  2. (位與&)如果相同位為1,則為1,相同位為0則為零,(<<1)然后左移1位:目的是將相加后需要進位的單獨取出;
  3. 重復以上2步,直到其中一方全為0,輸出結果即可。

具體代碼入下:

public class MyClass {
  public static void main(String[] s) {
    int i = add(-3, -1);
    System.out.println(i); 
  }

  public static int add(int x, int y) {
    if (y == 0) return x;
    int sum, carry;
    sum = x ^ y;
    carry = (x & y) << 1;
    return add(sum, carry);
  }
}
模擬:

第一次計算后:sum = 6 (0110) , carry = 2 (0010);
第二次計算后:sum = 4 (0100) , carry = 4 (0100);
第三次計算后:sum = 0 (0000) , carry = 8 (1000);
第四次計算后:sum = 8 (1000) , carry = 0 (0000);
第五次輸入結果8;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容