之前去關貿網路面試碰過的題目。
要利用bitwise XOR運算子
int a = 1;
int b = 2;
a ^= b;
b ^= a;
a ^= b;
System.out.println(a); // 2
System.out.println(b); // 1
也就是用比較2進位來計算
binary decimal
+----+
a ^= b |a|01| 1
=> a = a ^ b |b|10| 2
+----+
|a|11| 3
+----+
+----+
b ^= a |b|10| 2
=> b = b ^ a |a|11| 3
+----+
|b|01| 1
+----+
+----+
a ^= b |a|11| 3
=> a = a ^ b |b|01| 1
+----+
|a|10| 2
+----+
XOR表
^ | 0 1 ^ | F T
--+----- --+-----
0 | 0 1 F | F T
1 | 1 0 T | T F
參考下圖會比較好理解
大部分會用到bitwise計算的地方應該都是計算機底層的開關切換,或是加解密,或是遮罩設定之類的吧。會考碼農這種題目應該都是要砍薪水吧。
參考:
沒有留言:
張貼留言