先給出十轉二的除法 2 60 30 0 15 0 7 1 3 1 1 1 0 1 60轉二 111100 再介紹位運算符 a=60 b=13 A = 0011 1100 B = 0000 1101 A&b = 0000 1100A | B = 0011 1101A ^ B = 0011 0001~A ...
先給出十轉二的除法
2 60
30 0
15 0
7 1
3 1
1 1
0 1
60轉二 111100
再介紹位運算符
a=60 b=13
A = 0011 1100
B = 0000 1101
-----------------
A&b = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011
A<<2=240
A>>2=60
>>>是右移補零操作符
其中取反運算符就是0 ~ -1 60 ~ -60
a^b 是取a和b分別為1的位
a&b是取a和b同時為1的位 ,也就是a+b要進位的位
而a+b=(a^b)+((a&b)<<1)=((a^b)^((a&b)<<1) )+((a^b)&((a&b)<<1))
每進行一次,(a&b)不為0的位越少,(a&b)為0時,a^b即為原a+b的和
給出異或實現加法的java代碼
class Solution {
public int aplusb(int a, int b) {
while (b != 0) {
int _a = a ^ b;
int _b = (a & b) << 1;
a = _a;
b = _b;
}
return a;
}
}
關於a b值互換
先考慮加法實現
a=a+b;
b=a-b;a是a b的和 a-b 就是之前的a 把a的值給b
a=a-b; a是a b的和 此時b是之前的a a-b就是之前的b
再給出位運算
a=a^b;
b=a^b;相當於a^b^b 把a的值賦給b
a=a^b;相當於a^b^a 把b的值賦給a