C/C++

Các Thao Tác Trên Bit (Bitwise)

Giới thiệu

Bản chất máy tính chỉ hiểu được mã nhị phân dưới dạng dãy số 0 và 1. Mỗi con số như vậy được gọi là một bit. Ngôn ngữ lập trình có cung cấp cho chúng ta những toán tử để chúng ta có thể thao tác trên bit như các phép cơ bản and, or, not, xor, dịch trái, dịch phải. Trong bài viết này tôi sẽ cùng các bạn làm quen cũng như thực hành với những toán tử thao tác trên bit hay còn được gọi là bitwise.

Các toán thử thao tác trên bit (bitwise)

Dữ liệu lưu trữ trong máy tính dưới dạng nhị phân 0 1. Tôi có ví dụ như sau:

Thì lưu trữ dưới bộ nhớ sẽ là:

bitwise_ss_0

Tương tự

Lưu trữ b dưới bộ nhớ:

bitwise_ss_1

Không gian lưu trữ kiểu unsigned int lớn hơn unsigned char do unsigned int dùng 4bytes = 32bits để biểu diễn còn unsigned char dùng 1byte = 8bit để biểu diễn.

Các toán tử thao tác trên bit

Các phép thao tác trên bit Kí hiệu
Phép AND  &
Phép OR  |
Phép phủ định NOT ~
Phép XOR  ^
Phép dịch trái <<
Phép dịch phải >>

Phép AND

Kí hiệu: &

Bảng chân trị

A B A & B
0 0 0
0 1 0
1 0 0
1 1 1

Phép AND chỉ có giá trị 1 nếu cả hai toán hạng đều có giá trị 1.

Ví dụ:

bitwise_ss_3

Phép OR

Kí hiệu: |

Bảng chân trị

A B A | B
0 0 0
0 1 1
1 0 1
1 1 1

Phép OR chỉ có giá trị 0 nếu cả hai toán hạng đều có giá trị 0.

Ví dụ

bitwise_ss_4

Phép phủ định NOT

Kí hiệu: ~

Bảng chân trị

A ~A
0 1
1 0

Phép NOT đảo bit 1 thành 0 và ngược lại.

Ví dụ

bitwise_ss_5

Phép XOR

Kí hiệu: ^

Bảng chân trị

A B A ^ B
0 0 0
0 1 1
1 0 1
1 1 0

Phép XOR chỉ có giá trị 0 nếu cả hai toán hạng có cùng giá trị, cùng là giá trị 1, hay cùng là giá trị 0.

Ví dụ

bitwise_ss_6

Phép dịch trái <<

Kí hiệu: <<

Phép dịch trái n bit tương đương với phép nhân cho 2n.

Ví dụ

bitwise_ss_7

Lúc này B có giá trị là 4 * 2 = 16.

Phép dịch phải >>

Kí hiệu: >> 

Phép dịch trái n bit tương đương với phép chia cho 2n.

Ví dụ

bitwise_ss_8

Lúc này giá trị của B là: 4 / 22 = 1

Các ví dụ thao tác cơ bản trên bit

AND

OR

NOT

XOR

Dịch trái <<

Dịch phải >>

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.