Máy Tính XOR Theo Bit là gì?
Máy tính XOR theo bit (exclusive OR — hoặc loại trừ) nhận vào hai số nguyên và kết hợp chúng theo từng bit. Tại mỗi vị trí bit, kết quả là 1 khi hai bit đầu vào khác nhau, và 0 khi chúng giống nhau. Đây là một trong những phép toán cơ bản nhất trong lập trình, logic số, mật mã học và phát hiện lỗi.
Cách sử dụng
Nhập số nguyên thứ nhất (A) và số nguyên thứ hai (B), sau đó bấm tính. Công cụ sẽ trả về kết quả XOR ở dạng thập phân, kèm theo biểu diễn nhị phân và thập lục phân để bạn có thể kiểm tra lại từng bit một. Cả số nguyên dương lẫn số nguyên âm đều được chấp nhận.
Giải thích công thức
Trong hầu hết các ngôn ngữ lập trình, XOR được viết là A ^ B, còn trong ký hiệu toán học là A ⊕ B. Công thức tổng quát:
Bảng chân trị cho một bit đơn lẻ là: \(0 \oplus 0 = 0\), \(0 \oplus 1 = 1\), \(1 \oplus 0 = 1\), \(1 \oplus 1 = 0\). Phép toán được áp dụng độc lập cho từng cặp bit. Một tính chất hữu ích: \(A \oplus A = 0\) và \(A \oplus 0 = A\), đây chính là lý do XOR thường được dùng để hoán đổi giá trị và bật/tắt các cờ (flag).
Ví dụ minh họa
Lấy A = 12 và B = 10. Ở dạng nhị phân, 12 = 1100 và 10 = 1010. So sánh từng cột: \(1 \oplus 1 = 0\), \(1 \oplus 0 = 1\), \(0 \oplus 1 = 1\), \(0 \oplus 0 = 0\), cho ra 0110 = 6. Vậy:
So sánh các phép toán Bitwise
Mỗi phép toán bitwise hoạt động từng bit một lần. Đối với mỗi cặp bit đầu vào \(A\) và \(B\), phép toán tạo ra một bit đầu ra duy nhất. Bảng dưới đây cho thấy bảng chân trị đơn bit hoàn chỉnh cho sáu phép toán phổ biến nhất. XOR (OR loại trừ, viết \(A \oplus B\)) chỉ xuất ra 1 khi hai bit đầu vào khác nhau.
| A | B | AND (A&B) | OR (A|B) | XOR (A^B) | NAND ~(A&B) | NOR ~(A|B) | XNOR ~(A^B) |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
Lưu ý rằng XOR là phần bổ sung chính xác của XNOR, và XOR bằng 1 trong chính xác hai hàng nơi các đầu vào không đồng ý. Tính chất "bộ phát hiện sự khác biệt" này là những gì làm cho XOR hữu ích cho các kiểm tra chẵn lẻ, mã hóa đơn giản và chuyển đổi bit.
XOR trên các cặp đầu vào phổ biến
Bảng sau đây xử lý các cặp đại diện thông qua phép toán XOR bitwise, hiển thị từng toán hạng ở dạng nhị phân, sau đó kết quả ở dạng thập phân, nhị phân và thập lục phân. XOR được thực hiện từng bit: căn chỉnh hai số nhị phân và xuất ra 1 ở bất cứ đâu mà các bit khác nhau.
| A | B | A (nhị phân) | B (nhị phân) | A ^ B (thập phân) | A ^ B (nhị phân) | A ^ B (thập lục phân) |
|---|---|---|---|---|---|---|
| 5 | 3 | 0101 | 0011 | 6 | 0110 | 0x6 |
| 255 | 15 | 11111111 | 00001111 | 240 | 11110000 | 0xF0 |
| 12 | 12 | 1100 | 1100 | 0 | 0000 | 0x0 |
| 7 | 0 | 0111 | 0000 | 7 | 0111 | 0x7 |
| 10 | 6 | 1010 | 0110 | 12 | 1100 | 0xC |
| -1 | 1 | …11111111 | …00000001 | -2 | …11111110 | 0x…FE |
Hai mẫu nổi bật. Khi toán hạng là 0, XOR trả về toán hạng khác không thay đổi (\(7 \oplus 0 = 7\)). Khi cả hai toán hạng giống hệt nhau, XOR trả về 0 (\(12 \oplus 12 = 0\)). Ví dụ âm sử dụng biểu diễn phần bù của hai: \(-1\) là tất cả các bit 1, vì vậy XOR nó với bất kỳ giá trị nào đảo chiều mỗi bit (điều này tương đương với NOT bitwise), cho \(-1 \oplus 1 = -2\).
Câu hỏi thường gặp
XOR nghĩa là gì? Exclusive OR (hoặc loại trừ) — chỉ đúng khi đúng một trong hai đầu vào là đúng (bằng 1).
Vì sao XOR được dùng trong mật mã học? Vì việc XOR dữ liệu với một khóa có thể đảo ngược: áp dụng lại đúng khóa đó sẽ khôi phục dữ liệu ban đầu (\(A \oplus K \oplus K = A\)).
Công cụ có xử lý được số âm không? Có. Giá trị âm được biểu diễn theo dạng bù hai (two's complement), nên phần hiển thị nhị phân của số âm có thể gồm rất nhiều bit.