Bitwise Operators

Các Bitwise Operators (Toán tử Bitwise) trong Arduino (và C/C++) là các toán tử thao tác trực tiếp trên các bit của một số nguyên. Các toán tử này được sử dụng để thao tác với các bit trong một số nhị phân, có thể thay đổi hoặc kiểm tra các bit cụ thể trong một giá trị.

Các toán tử Bitwise trong Arduino:

Toán tử Mô tả Ví dụ
<< Bitshift left (Dịch trái) Dịch các bit sang bên trái (nhân với 2).
>> Bitshift right (Dịch phải) Dịch các bit sang bên phải (chia cho 2).
& Bitwise AND (Và bitwise) Kiểm tra các bit tương ứng là 1 trong cả hai số.
~ Bitwise NOT (Không bitwise) Đảo ngược tất cả các bit.
| Bitwise OR (Hoặc bitwise) Kiểm tra nếu ít nhất một trong các bit là 1.
^ Bitwise XOR (Hoặc loại trừ bitwise) Kiểm tra nếu các bit khác nhau (1 và 0 hoặc 0 và 1).

1. << (Bitshift Left - Dịch trái):

  • Mô tả: Dịch các bit của một giá trị sang bên trái. Mỗi lần dịch sang trái, giá trị của số sẽ tăng gấp đôi (nhân với 2).
  • Cú pháp: value << n (Dịch bit của value sang trái n vị trí).
  • Ví dụ:
     int x = 3; // 00000011 trong nhị phân
     int result = x << 2; // Dịch trái 2 bit, kết quả là 12 (001100)
     // result = 12

2. >> (Bitshift Right - Dịch phải):

  • Mô tả: Dịch các bit của một giá trị sang bên phải. Mỗi lần dịch sang phải, giá trị của số sẽ giảm một nửa (chia cho 2).
  • Cú pháp: value >> n (Dịch bit của value sang phải n vị trí).
  • Ví dụ:
     int x = 16; // 00010000 trong nhị phân
     int result = x >> 2; // Dịch phải 2 bit, kết quả là 4 (00000100)
     // result = 4

3. & (Bitwise AND - Và bitwise):

  • Mô tả: Thực hiện phép toán "và" giữa các bit của hai số. Chỉ khi cả hai bit là 1, kết quả sẽ là 1, nếu không thì là 0.
  • Cú pháp: value1 & value2.
  • Ví dụ:
     int a = 5;  // 0101 trong nhị phân
     int b = 3;  // 0011 trong nhị phân
     int result = a & b; // Kết quả là 1 (0001 trong nhị phân)
     // result = 1

4. ~ (Bitwise NOT - Không bitwise):

  • Mô tả: Đảo ngược tất cả các bit của một giá trị, chuyển 1 thành 0 và 0 thành 1.
  • Cú pháp: ~value.
  • Ví dụ:
     int x = 5;  // 0101 trong nhị phân
     int result = ~x; // Kết quả là -6 (11111010 trong nhị phân đối với số nguyên có dấu)
     // result = -6

5. | (Bitwise OR - Hoặc bitwise):

  • Mô tả: Thực hiện phép toán "hoặc" giữa các bit của hai số. Nếu ít nhất một trong hai bit là 1, kết quả sẽ là 1, nếu không thì là 0.
  • Cú pháp: value1 | value2.
  • Ví dụ:
     int a = 5;  // 0101 trong nhị phân
     int b = 3;  // 0011 trong nhị phân
     int result = a | b; // Kết quả là 7 (0111 trong nhị phân)
     // result = 7

6. ^ (Bitwise XOR - Hoặc loại trừ bitwise):

  • Mô tả: Thực hiện phép toán "hoặc loại trừ" giữa các bit của hai số. Kết quả sẽ là 1 nếu các bit khác nhau (1 và 0 hoặc 0 và 1), nếu các bit giống nhau, kết quả là 0.
  • Cú pháp: value1 ^ value2.
  • Ví dụ:
     int a = 5;  // 0101 trong nhị phân
     int b = 3;  // 0011 trong nhị phân
     int result = a ^ b; // Kết quả là 6 (0110 trong nhị phân)
     // result = 6

Tóm tắt các toán tử Bitwise trong Arduino:

Toán tử Mô tả Ví dụ
<< Bitshift left (Dịch trái) x << 2
>> Bitshift right (Dịch phải) x >> 2
& Bitwise AND (Và bitwise) a & b
~ Bitwise NOT (Không bitwise) ~x
| Bitwise OR (Hoặc bitwise) a | b
^ Bitwise XOR (Hoặc loại trừ bitwise) a ^ b