PHP Code:
a^=b^=a^=b;
mình hiểu thế này không biết đúng không .
ví dụ a = 2(a = 10 - nhi phan), b = 3 (b = 11 - nhi phan);
a^=b^=a^=b
thực hiện từ phải sang trái a^= b <=> a = a^b = 01 = 1;
b^=a^=b <=> b = b^(a^=b) = 11^01 = 10 = 2;
a^=b^=a^=b <=> a = a^(b^=a^=b) = 01^10 = 11 = 3;
toán tử bit thao tác trên từng bit tương ứng, (bit thứ i của a sẽ được thực hiện tương ứng với bit thứ i của b)
vì vậy trong th này để chứng minh ta chỉ cần chứng minh trên 1 bit thui
đơn giản nhất là ta lập bảng chân lý là thấy ngay
Mở rộng linh tinh thêm về toán tử trên bit
+ a&1 để kiểm tra tính chẵn lẻ của a,
hoặc đọc bit cuối của a trong bài toán đổi sang nhị phân
( mở rộng thêm là ta dùng dùng a>=0 để đọc bít đầu của a)
+ dùng toán tử | có thể giúp ta thay đổi 1 bit của 1 số nào đó
toán tử này được áp dụng rất nhiều trong các kĩ thuật cờ hiệu
.........
hì hì, tạm thời ko nhớ hết
Bạn ghi ra thành 3 dòng sẽ hiểu, cái này IT vay mượn từ Maths, để ý là C/C++ evaluate từ phải qua trái.
Ghi lại :
Từ (1) và (2)
-> b = b ^ a= b ^ ( a ^ b ) = ( b ^ b ) ^ a = 0 ^ b = a
Từ (3)
-> a = a ^ b = ( a ^ b ) ^ a = ( a ^ a ) ^ b = 0 ^ b = b
Code:
1. a ^= b ^= a ^= b; -> a = a ^ b; 2. a ^= b^ =a ^=b ; -> b = b ^ a; 3. a ^= b ^= a ^= b; -> a = a ^ b;
Từ (1) và (2)
-> b = b ^ a= b ^ ( a ^ b ) = ( b ^ b ) ^ a = 0 ^ b = a
Từ (3)
-> a = a ^ b = ( a ^ b ) ^ a = ( a ^ a ) ^ b = 0 ^ b = b
__________________
Không có nhận xét nào:
Đăng nhận xét