Search…

Các Thao Tác trên Bit

21/09/20203 min read
Tìm hiểu về các phép tính trên bit - bitwise operator, ví dụ lập trình với bitwise operator bằng code C/C++.

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, ví dụ:

unsigned char a = 12;

Thì lưu trữ dưới bộ nhớ là: 0000 1100

Tương tự

unsigned int b = 95;

Lưu trữ b dưới bộ nhớ là: 0000 0000 0000 0000 0000 0000 0101 1111

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

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

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 - Shift left <<
Phép dịch phải - Shift right >>

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ụ:

A            0000 1100
B            0101 0101
C = A & B    0000 0100

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ụ

A            0000 1100
B            0101 0101
C = A | B    0101 1101

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ụ

A         0000 1100
B = ~A    1111 0011

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ụ

A            0000 1100
B            0101 0101
C = A ^ B    0101 1001

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ụ

A             0000 1100
                   <—
B = A << 2    0011 0000

Phép dịch phải >>

Kí hiệu: >> 

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

Ví dụ

A             0000 1100
                   —>
B = A >> 2    0000 0011

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

AND

unsigned char a = 5;           // 00000101(5)
unsigned char b = 6;           // 00000110(6)
unsigned char c = a & b;       // 00000100(4)

OR

unsigned char a = 5;           // 00000101(5)
unsigned char b = 6;           // 00000110(6)
unsigned char c = a | b;       // 00000111(7)

NOT

unsigned char a = 5;  // 00000101(5)
unsigned char b = ~a; // 11111010(250)

XOR

unsigned char a = 5;  // 00000101(5)
unsigned char b = 6;  // 00000110(6)
int c = a ^ b;        // 00000011(3)

Dịch trái <<

unsigned char a = 5;      // 00000101(5)
unsigned char b = a << 4; // 01010000(80)

Dịch phải >>

unsigned char a = 5;      // 00000101(5)
unsigned char b = a >> 1; // 00000010(2)
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024