網頁

2018/8/26

Java 題目 交換兩個整數變數的值,不使用第三個變數

之前去關貿網路面試碰過的題目。

要利用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計算的地方應該都是計算機底層的開關切換,或是加解密,或是遮罩設定之類的吧。會考碼農這種題目應該都是要砍薪水吧。


參考:

沒有留言:

張貼留言