Toán tử Bitwise là gì?
BITWISE OPERATORS được sử dụng để thao tác dữ liệu ở mức bit, còn được gọi là lập trình mức bit. Bitwise hoạt động trên một hoặc nhiều mẫu bit hoặc chữ số nhị phân ở cấp độ các bit riêng lẻ của chúng. Chúng được sử dụng trong tính toán số để làm cho quá trình tính toán nhanh hơn.
Sau đây là danh sách các toán tử bitwise được cung cấp bởi ngôn ngữ lập trình 'C':
Nhà điều hành | Ý nghĩa |
& | Toán tử AND Bitwise |
| | Toán tử OR Bitwise |
^ | Toán tử OR độc quyền bitwise |
~ | Toán tử bổ sung của Binary One là toán tử một ngôi |
<< | Nhà điều hành dịch chuyển trái |
>> | Người điều hành ca phải |
Các toán tử bitwise không thể được áp dụng trực tiếp cho các kiểu dữ liệu nguyên thủy như float, double,… Hãy luôn nhớ một điều rằng các toán tử bitwise chủ yếu được sử dụng với kiểu dữ liệu số nguyên vì tính tương thích của nó.
Các toán tử logic bit làm việc trên từng bit dữ liệu, bắt đầu từ bit ít quan trọng nhất, tức là bit LSB là bit ngoài cùng bên phải, làm việc theo hướng MSB (Bit quan trọng nhất) là bit ngoài cùng bên trái.
Kết quả của việc tính toán các toán tử logic theo bit được hiển thị trong bảng dưới đây.
x | y | x & y | x | y | x y |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
Trong hướng dẫn này, bạn sẽ học-
- Toán tử Bitwise là gì?
- Bitwise VÀ
- Bitwise HOẶC
- Độc quyền Bitwise HOẶC
- Toán tử dịch chuyển bit
- Toán tử bổ sung bitwise
Bitwise VÀ
Đây là một trong những toán tử bitwise logic được sử dụng phổ biến nhất. Nó được biểu thị bằng một dấu và (&). Hai biểu thức số nguyên được viết trên mỗi bên của toán tử (&).
Kết quả của phép toán bitwise AND là 1 nếu cả hai bit đều có giá trị là 1; nếu không, kết quả luôn là 0.
Chúng ta hãy xem xét rằng chúng ta có 2 biến op1 và op2 với các giá trị như sau:
Op1 = 0000 1101Op2 = 0001 1001
Kết quả của phép toán AND trên các biến op1 và op2 sẽ là
Result = 0000 1001
Như chúng ta có thể thấy, hai biến được so sánh từng chút một. Bất cứ khi nào giá trị của một bit trong cả hai biến là 1, thì kết quả sẽ là 1 hoặc khác 0.
Bitwise HOẶC
Nó được biểu diễn bằng một dấu thanh dọc duy nhất (|). Hai biểu thức số nguyên được viết trên mỗi cạnh của toán tử (|).
Kết quả của phép toán OR theo bit là 1 nếu ít nhất một trong các biểu thức có giá trị là 1; nếu không, kết quả luôn là 0.
Chúng ta hãy xem xét rằng chúng ta có 2 biến op1 và op2 với các giá trị như sau:
Op1 = 0000 1101Op2 = 0001 1001
Kết quả của phép toán OR trên các biến op1 và op2 sẽ là
Result = 0001 1101
Như chúng ta có thể thấy, hai biến được so sánh từng chút một. Bất cứ khi nào giá trị của một bit trong một trong các biến là 1, thì kết quả sẽ là 1 hoặc khác 0.
Độc quyền Bitwise HOẶC
Nó được biểu thị bằng ký hiệu (^). Hai biểu thức số nguyên được viết trên mỗi cạnh của toán tử (^).
Kết quả của phép toán Bitwise Exclusive-OR là 1 nếu chỉ một trong các biểu thức có giá trị là 1; nếu không, kết quả luôn là 0.
Chúng ta hãy xem xét rằng chúng ta có 2 biến op1 và op2 với các giá trị như sau:
Op1 = 0000 1101Op2 = 0001 1001
Kết quả của phép toán OR trên các biến op1 và op2 sẽ là
Result = 0001 0100
Như chúng ta có thể thấy, hai biến được so sánh từng chút một. Bất cứ khi nào chỉ có một biến giữ giá trị 1 thì kết quả là 0, còn lại 0 sẽ là kết quả.
Hãy để chúng tôi viết một chương trình đơn giản minh họa các toán tử logic bit.
#includeint main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}
Đầu ra:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
Toán tử dịch chuyển bit
Các toán tử dịch chuyển theo chiều bit được sử dụng để di chuyển / dịch chuyển các mẫu bit sang bên trái hoặc bên phải. Trái và phải là hai toán tử shift được cung cấp bởi 'C' được biểu diễn như sau:
Operand << n (Left Shift)Operand >> n (Right Shift)
Đây,
- một toán hạng là một biểu thức số nguyên mà chúng ta phải thực hiện thao tác shift.
- 'n' là tổng số vị trí bit mà chúng ta phải dịch chuyển trong biểu thức số nguyên.
Thao tác dịch trái sẽ chuyển số bit 'n' sang phía bên trái. Các bit ngoài cùng bên trái trong biểu thức sẽ được bật ra và n bit có giá trị 0 sẽ được điền vào phía bên phải.
Thao tác dịch phải sẽ chuyển số bit 'n' sang phía bên phải. Các bit 'n' ngoài cùng bên phải trong biểu thức sẽ được bật ra và giá trị 0 sẽ được điền vào phía bên trái.
Ví dụ: x là một biểu thức số nguyên với dữ liệu 1111. Sau khi thực hiện thao tác shift, kết quả sẽ là:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Toán tử shift có thể được kết hợp sau đó nó có thể được sử dụng để trích xuất dữ liệu từ biểu thức số nguyên. Hãy để chúng tôi viết một chương trình để chứng minh việc sử dụng các toán tử dịch chuyển bit.
#includeint main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}
Đầu ra:
Left shift - Value of c is 80Right shift - Value of c is 5
Sau khi thực hiện thao tác dịch trái, giá trị sẽ trở thành 80 có giá trị tương đương nhị phân là 101000.
Sau khi thực hiện thao tác dịch phải, giá trị sẽ trở thành 5 có giá trị tương đương nhị phân là 000101.
Toán tử bổ sung bitwise
Phần bù bit cũng được gọi là toán tử phần bù của một người vì nó luôn chỉ nhận một giá trị hoặc một toán hạng. Nó là một toán tử một ngôi.
Khi chúng ta thực hiện bổ sung trên bất kỳ bit nào, tất cả các giá trị 1 trở thành 0 và ngược lại.
Nếu chúng ta có một biểu thức số nguyên chứa 0000 1111 thì sau khi thực hiện phép toán bổ sung bit, giá trị sẽ trở thành 1111 0000.
Toán tử phần bù bit được ký hiệu bằng dấu ngã ký hiệu (~).
Hãy để chúng tôi viết một chương trình chứng minh việc triển khai toán tử bổ sung bitwise.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Đầu ra:
Complement - Value of c is -11
Đây là một chương trình khác, với một ví dụ về tất cả các operato đã được thảo luận cho đến nay:
#includemain() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}
Sau khi chúng tôi biên dịch và chạy chương trình, nó tạo ra kết quả sau:
Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12
Tóm lược
- Toán tử bitwise là toán tử đặc biệt được cung cấp bởi 'C.'
- Chúng được sử dụng trong lập trình mức bit.
- Các toán tử này được sử dụng để thao tác các bit của một biểu thức số nguyên.
- Lôgic, dịch chuyển và bổ sung là ba loại toán tử bitwise.
- Toán tử bổ sung bitwise được sử dụng để đảo ngược các bit của một biểu thức.