Trong java dấu “^” là phép xor bit.
Phép xor là phép chỉ lấy giá trị true nếu hai vế của biểu thức có giá trị ngược nhau.
True ^ True == False
True ^ False == True
False ^ True == True
False ^ False == False
Phép này có một loạt các tính chất thú vị sau:
- Số 0 xor với bất kì số nào cũng ra chính số đó: 0^x==x (với mọi x)
- Hai số giống nhau xor với nhau chắc chắn ra 0: x^x==0 (với mọi x)
- Xor có tính chất kết hợp: a xor (b xor c) == (a xor b) xor c
- Tính chất thú vị nhất của xor là tính chất đảo ngược: a xor b == c thì a xor c == b
Tính chất phía trên giúp phép xor có khả năng khôi phục văn bản gốc.
Ứng dụng của tính chất này là:
private void swap(int a, int b) { // Không cần dùng temp variable
a = a ^ b;
b = b ^ a; // b" == b ^ a" == b ^ a ^ b == a
a = a ^ b; // a"" == b" ^ a" == a ^ a ^ b == b
}
Hoặc dùng cho bài toán check sum khi download… Nói chung là cứ làm về chủ đề giữ gìn văn bản gốc là ta nghĩ đến xor trước.