*關(guān)于Java位運算可以參考之前的這篇文章: * http://www.reibang.com/p/6a181eb2bbcd
比如:求3與5的和郊艘,這里我們用二進制的位運算實現(xiàn)
思路是這樣的:
3轉(zhuǎn)為二進制為0011
5轉(zhuǎn)為二進制為0101
給定的數(shù)轉(zhuǎn)成二進制后:
- (位異或^)如果相同位不同則為1榜跌,相同位相同則為0:目的是將相加后不需要進位的取出像吻;
- (位與&)如果相同位為1搅幅,則為1,相同位為0則為零,(<<1)然后左移1位:目的是將相加后需要進位的單獨取出;
- 重復(fù)以上2步喊熟,直到其中一方全為0,輸出結(jié)果即可胧奔。
具體代碼入下:
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);
第五次輸入結(jié)果8逊移;