Skip to content
LIVE FEED

BlogMẹo nhớ 6 toán tử Bitwise trong C cho người mới

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ênMẹo nhớKết quả khi nào là 1/đúng
&AND“và” — cả hai cùng đồng ýcả 2 bit đều 1
\|ORvạch đứng — 1 trong 2 là đượcít nhất 1 bit là 1
^XORmái nhà — hai bên khác nhau2 bit khác nhau
~NOTsóng lượn — đảo hếtlật ngược từng bit
<<Shift Leftmũi tên trỏ trái — dịch tráinhân với 2ⁿ
>>Shift Rightmũi tên trỏ phải — dịch phảichia 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ứ ix \| (1 << i)
Tắt bit thứ ix & ~(1 << i)
Đảo bit thứ ix ^ (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 2x > 0 && (x & (x - 1)) == 0
Xóa bit 1 cuối cùngx & (x - 1)
Lấy riêng bit 1 cuối cùngx & (-x)
Đổi chỗ 2 biến không cần biến tạma ^= 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 = 56
  • 40 >> 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) & 1 vớ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 = 11
  • b ^= 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.

Contact
Facebook
TOP