C Các toán tử Bitwise: AND, OR, XOR, Các phép toán bổ sung và thay đổi

Trong hướng dẫn này, bạn sẽ tìm hiểu về tất cả 6 toán tử bitwise trong lập trình C với các ví dụ.

Trong đơn vị logic-số học (nằm trong CPU), các phép toán như: cộng, trừ, nhân và chia được thực hiện ở mức bit. Để thực hiện các phép toán mức bit trong lập trình C, các toán tử bitwise được sử dụng.

Người điều hành Ý nghĩa của các toán tử
& Bitwise VÀ
| Bitwise HOẶC
^ Bitwise XOR
~ Bổ sung bitwise
<< Sang trái
>> Chuyển sang phải

Toán tử Bitwise AND &

Đầu ra của bitwise AND là 1 nếu các bit tương ứng của hai toán hạng là 1. Nếu một trong hai bit của một toán hạng là 0, kết quả của bit tương ứng được đánh giá là 0.

Chúng ta hãy giả sử hoạt động bitwise AND của hai số nguyên 12 và 25.

 12 = 00001100 (Trong nhị phân) 25 = 00011001 (Trong nhị phân) Hoạt động bit của 12 và 25 00001100 & 00011001 ________ 00001000 = 8 (Trong thập phân)

Ví dụ # 1: Bitwise AND

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Đầu ra

 Đầu ra = 8

Toán tử Bitwise OR |

Đầu ra của bitwise OR là 1 nếu có ít nhất một bit tương ứng của hai toán hạng là 1. Trong Lập trình C, toán tử OR theo chiều bit được ký hiệu là |.

12 = 00001100 (Ở chế độ nhị phân) 25 = 00011001 (Ở dạng nhị phân) Hoạt động theo chiều bit HOẶC của 12 và 25 00001100 | 00011001 ________ 00011101 = 29 (Theo số thập phân)

Ví dụ # 2: Bitwise HOẶC

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Đầu ra

 Đầu ra = 29

Toán tử Bitwise XOR (OR) độc quyền ^

Kết quả của toán tử XOR theo bit là 1 nếu các bit tương ứng của hai toán hạng đối nhau. Nó được ký hiệu là ^.

 12 = 00001100 (Trong nhị phân) 25 = 00011001 (Trong nhị phân) Hoạt động XOR theo chiều bit của 12 và 25 00001100 00011001 ________ 00010101 = 21 (Trong thập phân)

Ví dụ # 3: Bitwise XOR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Đầu ra

 Đầu ra = 21

Toán tử bổ sung bit ~

Toán tử khen bitwise là toán tử một ngôi (chỉ hoạt động trên một toán hạng). Nó thay đổi 1 thành 0 và 0 thành 1. Nó được ký hiệu là ~.

 35 = 00100011 (Trong nhị phân) Bổ sung theo chiều bit Hoạt động của 35 ~ 00100011 ________ 11011100 = 220 (Trong thập phân) 

Xoắn trong toán tử bổ sung bitwise trong Lập trình C

Phần bổ sung bitwise của 35 (~ 35) là -36 thay vì 220, nhưng tại sao?

Với bất kỳ số nguyên n nào, phần bù theo chiều bit của n sẽ là -(n+1). Để hiểu điều này, bạn nên có kiến ​​thức về phần bù của 2.

2 của bổ sung

Phần bù của hai là một phép toán trên số nhị phân. Phần bù 2 của một số bằng phần bù của số đó cộng với 1. Ví dụ:

 Phần bù của thập phân nhị phân 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (thập phân) 1 00000001 - (11111110 + 1) = -11111111 = -256 (thập phân) 12 00001100 - (11110011 + 1) = -11110100 = -244 (thập phân) 220 11011100 - (00100011 + 1) = -00100100 = -36 (thập phân) Lưu ý: Phần tràn bị bỏ qua khi tính toán phần bù của 2. 

Phần bù theo bit của 35 là 220 (ở dạng thập phân). Phần bù của 2 của 220 là -36. Do đó, đầu ra là -36 thay vì 220.

Phần bù bit của bất kỳ số N nào là - (N + 1). Đây là cách thực hiện:

 phần bù theo bit của N = ~ N (được biểu diễn ở dạng phần bù của 2) 2'độ hoàn thành của ~ N = - (~ (~ N) +1) = - (N + 1) 

Ví dụ # 4: Phần bổ sung bitwise

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Đầu ra

 Đầu ra = -36 Đầu ra = 11

Toán tử Shift trong lập trình C

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

thú vị bài viết...