Xem thêm

Toán Tử Bitwise: Khám phá và ứng dụng trong ngôn ngữ lập trình C++

Huy Erick
Toán tử bitwise không phải là khái niệm xa lạ đối với những lập trình viên C++. Với 6 thao tác toán tử được gọi là toán tử bitwise, C++ mang đến cho chúng ta...

Toán Tử Bitwise

Toán tử bitwise không phải là khái niệm xa lạ đối với những lập trình viên C++. Với 6 thao tác toán tử được gọi là toán tử bitwise, C++ mang đến cho chúng ta khả năng thao tác trực tiếp trên các bit của số. Trong bài viết này, chúng ta sẽ khám phá và ứng dụng các toán tử bitwise này.

Toán Tử Dịch Bit Trái và Dịch Bit Phải

Trong phép dịch bit trái, chúng ta sẽ dịch chuyển các bit sang trái với số lượng bit cần dịch chuyển như là toán hạng bên phải của phép toán. Khi chúng ta viết x << 1, nghĩa là chúng ta dịch chuyển số x sang trái 1 bit. Các bit mới dịch chuyển sẽ được điền bằng 0. Ví dụ:

0011 << 1 == 0110
0011 << 2 == 1100
0011 << 3 == 1000

Tương tự, phép dịch bit phải cũng hoạt động tương tự như phép dịch bit trái, nhưng ngược lại. Ví dụ:

1100 >> 1 == 0110
1100 >> 2 == 0011
1100 >> 3 == 0001

Toán Tử NOT

Toán tử NOT (~) là toán tử bitwise dễ hiểu nhất trong số các toán tử bitwise khác. Nó đơn giản chỉ là lật từng bit từ 0 sang 1 hoặc ngược lại. Lưu ý rằng kết quả của phép NOT phụ thuộc vào kích thước của kiểu dữ liệu bạn đang sử dụng. Ví dụ:

~0100 == 1011
~0000 0100 == 1111 1011

Toán Tử OR

Toán tử OR (|) thực hiện phép OR logic giữa từng cặp bit. Kết quả của phép OR logic là 1 nếu ít nhất một trong hai bit là 1. Ví dụ:

0b0101 | 0b0110 == 0b0111

Chúng ta có thể sử dụng toán tử OR trên nhiều biểu thức cùng lúc, ví dụ:

0b0111 | 0b0011 | 0b0001 == 0b0111

Toán Tử AND

Toán tử AND (&) thực hiện phép AND logic giữa từng cặp bit. Kết quả của phép AND logic là 1 chỉ khi cả hai bit đều là 1. Ví dụ:

0b0101 & 0b0110 == 0b0100

Chúng ta cũng có thể sử dụng toán tử AND trên nhiều biểu thức cùng lúc, ví dụ:

0b0001 & 0b0011 & 0b0111 == 0b0001

Toán Tử XOR

Toán tử XOR (^) thực hiện phép XOR logic giữa từng cặp bit. Kết quả của phép XOR logic là 1 chỉ khi một trong hai bit là 1, nhưng không cả hai cùng là 1. Ví dụ:

0b0110 ^ 0b0011 == 0b0101

Chúng ta cũng có thể sử dụng toán tử XOR trên nhiều biểu thức cùng lúc, ví dụ:

0b0001 ^ 0b0011 ^ 0b0111 == 0b0101

Phép Gán Toán Tử Bitwise

Tương tự như các toán tử gán số học, C++ cung cấp các toán tử gán bit để thuận tiện sửa đổi biến. Ví dụ, phép gán x = x >> 1 có thể được viết thành x >>= 1.

std::bitset<4> bits { 0b0100 };
bits >>= 1;
std::cout << bits;

Kết quả của đoạn code này là 0010.

Những khái niệm về toán tử bitwise đã trở nên rõ ràng hơn qua bài viết này. Hi vọng rằng các ví dụ và cách ứng dụng trong ngôn ngữ lập trình C++ sẽ giúp bạn nắm vững hơn về toán tử bitwise và áp dụng chúng trong công việc lập trình của mình.

1