BlogMẹo nhớ 6 toán tử Bitwise trong C cho người mới
Bố cục bài viết
Trang này
Ngày tạo
22/09/2026
Cập nhật
Lượt xem
6
Đọc
7m
Bitwise là phần nhiều người mới học C thấy khó nhớ vì có tới 6 ký tự (&, |, ^, ~, <<, >>) trông na ná ký hiệu toán học nhưng ý nghĩa hoàn toàn khác. Bài này tổng hợp mẹo nhớ cho từng ký tự, kèm công thức khái quát, ví dụ minh họa và bài tập có hướng dẫn giải để luyện tập.
1. Mẹo nhớ từng ký tự bitwise
& — AND (dấu “và”)
Mẹo nhớ:
&giống chữ viết tắt “and” → “cả hai phải đồng ý” → cả 2 bit là 1 thì kết quả mới là 1.
Công thức: 1 & 1 = 1, còn lại = 0
Ví dụ: 6 & 3 → 110 & 011 = 010 = 2
| — OR (dấu “hoặc”)
Mẹo nhớ:
|là một vạch thẳng đứng, tượng trưng cho “một trong hai đường cũng được” → chỉ cần 1 bit là 1 thì ra 1.
Công thức: 0 | 0 = 0, còn lại = 1
Ví dụ: 6 | 3 → 110 | 011 = 111 = 7
^ — XOR (dấu “mũ”, đọc là “khác”)
Mẹo nhớ:
^giống hình mái nhà nhọn, hai bên “chênh nhau” → ra 1 khi 2 bit khác nhau.
Công thức: x ^ x = 0, x ^ 0 = x
Ví dụ: 6 ^ 3 → 110 ^ 011 = 101 = 5
~ — NOT (dấu ngã, đảo bit)
Mẹo nhớ: dấu
~giống con sóng lượn qua lượn lại → đảo ngược hết mọi thứ (0 thành 1, 1 thành 0).
Công thức: ~x = đảo tất cả bit (kể cả bit dấu)
Ví dụ: với số 8-bit, ~6 (00000110) → 11111001 = -7 (vì số âm dùng bù 2)
<< — dịch trái (Shift Left)
Mẹo nhớ: mũi tên trỏ trái → dịch các bit sang trái, giống nhân đôi liên tục.
Công thức: x << n = x × 2ⁿ
Ví dụ: 5 << 2 = 5 × 4 = 20
>> — dịch phải (Shift Right)
Mẹo nhớ: mũi tên trỏ phải → dịch bit sang phải, giống chia đôi liên tục.
Công thức: x >> n = x ÷ 2ⁿ (làm tròn xuống)
Ví dụ: 20 >> 2 = 20 ÷ 4 = 5
Bảng tổng hợp
| Ký tự | Tên | Mẹo nhớ | Kết quả khi nào là 1/đúng |
|---|---|---|---|
& | AND | “và” — cả hai cùng đồng ý | cả 2 bit đều 1 |
\| | OR | vạch đứng — 1 trong 2 là được | ít nhất 1 bit là 1 |
^ | XOR | mái nhà — hai bên khác nhau | 2 bit khác nhau |
~ | NOT | sóng lượn — đảo hết | lật ngược từng bit |
<< | Shift Left | mũi tên trỏ trái — dịch trái | nhân với 2ⁿ |
>> | Shift Right | mũi tên trỏ phải — dịch phải | chia cho 2ⁿ |
2. Các công thức bitwise hay dùng khác
| Muốn làm gì | Công thức |
|---|---|
| Kiểm tra bit thứ i bật hay tắt | (x >> i) & 1 |
| Bật bit thứ i | x \| (1 << i) |
| Tắt bit thứ i | x & ~(1 << i) |
| Đảo bit thứ i | x ^ (1 << i) |
| Kiểm tra chẵn/lẻ | x & 1 (1 là lẻ, 0 là chẵn) |
| Kiểm tra lũy thừa của 2 | x > 0 && (x & (x - 1)) == 0 |
| Xóa bit 1 cuối cùng | x & (x - 1) |
| Lấy riêng bit 1 cuối cùng | x & (-x) |
| Đổi chỗ 2 biến không cần biến tạm | a ^= b; b ^= a; a ^= b; |
3. Bài tập luyện tập
Bài 1
Tính 12 & 10 bằng tay.
Hướng dẫn giải:
- 12 =
1100, 10 =1010 - AND từng cột:
1100 & 1010=1000 - Kết quả = 8
Bài 2
Tính 9 | 5.
Hướng dẫn giải:
- 9 =
1001, 5 =0101 - OR từng cột:
1001 | 0101=1101 - Kết quả = 13
Bài 3
Tính 14 ^ 9.
Hướng dẫn giải:
- 14 =
1110, 9 =1001 - XOR từng cột (khác nhau → 1):
1110 ^ 1001=0111 - Kết quả = 7
Bài 4
Không viết nhị phân, tính nhanh 7 << 3 và 40 >> 3.
Hướng dẫn giải:
7 << 3= 7 × 2³ = 7 × 8 = 5640 >> 3= 40 ÷ 2³ = 40 ÷ 8 = 5
Bài 5
Cho x = 20. Kiểm tra bit thứ 2 (tính từ 0) đang bật hay tắt.
Hướng dẫn giải:
- 20 =
10100 - Áp dụng công thức
(x >> i) & 1với i = 2:(20 >> 2) & 1=00101 & 1= 1 - Bit thứ 2 đang bật
Bài 6
Cho x = 18. Hãy bật bit thứ 0 lên.
Hướng dẫn giải:
- 18 =
10010 - Áp dụng công thức
x | (1 << i)với i = 0:1 << 0=00001 10010 | 00001=10011= 19
Bài 7
Cho x = 15. Hãy tắt bit thứ 1.
Hướng dẫn giải:
- 15 =
1111 - Áp dụng công thức
x & ~(1 << i)với i = 1:1 << 1=0010→~0010=...1101 1111 & 1101=1101= 13
Bài 8
Kiểm tra xem 32 có phải là lũy thừa của 2 không. Làm tương tự với 20.
Hướng dẫn giải:
- Với 32:
32 - 1= 31 =011111, 32 =100000.100000 & 011111= 0 → đúng, 32 là lũy thừa của 2. - Với 20:
20 - 1= 19 =10011, 20 =10100.10100 & 10011=10000≠ 0 → sai, 20 không phải lũy thừa của 2.
Bài 9
Cho a = 7, b = 12. Đổi chỗ 2 biến này bằng XOR (không dùng biến tạm), chỉ ra từng bước.
Hướng dẫn giải:
a ^= b→ a =7 ^ 12= 11b ^= a→ b =12 ^ 11= 7 (chính là giá trị a ban đầu)a ^= b→ a =11 ^ 7= 12 (chính là giá trị b ban đầu)- Kết quả: a = 12, b = 7 → đã đổi chỗ thành công
Bài 10
Đếm số bit 1 trong số x = 11 bằng cách lặp lại thao tác x & (x - 1).
Hướng dẫn giải:
- 11 =
1011→ đếm = 0 - Lần 1:
1011 & 1010=1010, đếm = 1 - Lần 2:
1010 & 1001=1000, đếm = 2 - Lần 3:
1000 & 0111=0000, đếm = 3 - x = 0 → dừng lại. Vậy 11 có 3 bit 1
Tổng kết
Nắm chắc 6 ký tự bitwise bằng mẹo liên tưởng hình dạng (AND = đồng ý cả hai, OR = vạch đứng chỉ cần một, XOR = mái nhà khác nhau, NOT = sóng lượn đảo hết, <</>> = mũi tên trỏ hướng dịch chuyển), sau đó luyện các công thức thao tác bit qua bài tập cụ thể — đó là cách nhanh nhất để làm chủ bitwise trong C mà không cần học thuộc lòng máy móc.