/**
* 不使用 +,-,* ,/ 計算兩個整數的和
* */
public static void testGetAdd(){
int a = 5;//101
int b = 7;//111
while (b!=0){
int t = a^b;
System.out.println("testGetAdd a^b binary="+Integer.toBinaryString(t));
b = (a&b)<<1;
System.out.println("testGetAdd (a&b)<<1 binary="+Integer.toBinaryString(b));
a = t;
}
/**
* 1.這一步是通過'異或運算'計算每一位相加後的值,不算進位。a^b
* 101^111 即:
* 101
* 111
* ----
* 010
* *******************
* 2.得到進位 a&b<<1
* 101&111 即:
* 101
* 111
* ---
* 101
* 計算出結果是對應位相加後需要進位到高位的值,需要左移動一位,以便加到高位上去
* 101<<1 = 1010
* ********************
* 3.然後把兩個數字再加一起就是'和',但是相加過程還會有進位,於是循環相加過程即第一步與第二步,直到沒有進位
* (這一步其實就是遞歸的思路,還是兩個數字相加)
* */
}
java 不使用 “+,-,*,/” 運算符計算兩個整數的和
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.