Các toán tử Bitwise C #: Các phép toán AND, OR, XOR, Bổ sung và Shift

Trong hướng dẫn này, chúng ta sẽ tìm hiểu chi tiết về toán tử bitwise và bit shift trong C #. C # cung cấp 4 toán tử dịch chuyển bit và 2 bit.

Toán tử bitwise và bit shift được sử dụng để thực hiện các phép toán mức bit trên dữ liệu số nguyên (int, long, v.v.) và dữ liệu boolean. Các toán tử này không được sử dụng phổ biến trong các tình huống thực tế.

Nếu bạn muốn khám phá thêm, hãy truy cập các ứng dụng thực tế của phép toán bit.

Các toán tử bitwise và bit shift có sẵn trong C # được liệt kê dưới đây.

Danh sách các toán tử C # Bitwise
Nhà điều hành Tên người vận hành
~ Bổ sung Bitwise
& Bitwise VÀ
| Bitwise HOẶC
^ Bitwise Exclusive OR (XOR)
<< Dịch chuyển sang trái theo chiều bit
>> Chuyển sang phải theo chiều bit

Bitwise HOẶC

Toán tử OR bitwise được đại diện bởi |. Nó thực hiện phép toán OR theo bit trên các bit tương ứng của hai toán hạng. Nếu một trong hai bit là 1, kết quả là 1. Nếu không thì kết quả là 0.

Nếu các toán hạng là kiểu bool, phép toán OR theo bit tương đương với phép toán OR logic giữa chúng.

Ví dụ,

 14 = 00001110 (Ở dạng nhị phân) 11 = 00001011 (Ở dạng nhị phân)

ORHoạt động bitwise từ 14 đến 11:

 00001110 00001011 -------- 00001111 = 15 (Trong hệ thập phân)

Ví dụ 1: Bitwise HOẶC

 using System; namespace Operator ( class BitWiseOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber | secondNumber; Console.WriteLine("(0) | (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

14 | 11 = 15

Bitwise VÀ

Toán tử AND bitwise được đại diện bởi &. Nó thực hiện thao tác theo bitwise AND trên các bit tương ứng của hai toán hạng. Nếu một trong hai bit là 0, kết quả là 0. Nếu không thì kết quả là 1.

Nếu các toán hạng là kiểu bool, phép toán AND theo bit tương đương với phép toán AND logic giữa chúng.

Ví dụ,

 14 = 00001110 (Ở dạng nhị phân) 11 = 00001011 (Ở dạng nhị phân)

Hoạt động bitwise AND giữa 14 và 11:

 00001110 00001011 -------- 00001010 = 10 (Ở dạng thập phân)

Ví dụ 2: Bitwise AND

 using System; namespace Operator ( class BitWiseAND ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber & secondNumber; Console.WriteLine("(0) & (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 14 & 11 = 10

Bitwise XOR

Toán tử Bitwise XOR được đại diện bởi ^. Nó thực hiện thao tác XOR theo chiều bit trên các bit tương ứng của hai toán hạng. Nếu các bit tương ứng giống nhau , kết quả là 0. Nếu các bit tương ứng khác nhau , kết quả là 1.

Nếu các toán hạng thuộc loại bool, phép toán XOR theo chiều bit tương đương với phép toán XOR logic giữa chúng.

Ví dụ,

 14 = 00001110 (Ở dạng nhị phân) 11 = 00001011 (Ở dạng nhị phân)

Hoạt động Bitwise XOR từ 14 đến 11:

 00001110 00001011 -------- 00000101 = 5 (Trong hệ thập phân)

Nếu bạn muốn biết thêm về cách sử dụng Bitwise XOR, hãy truy cập Điều kỳ diệu của XOR

Ví dụ 3: Bitwise XOR

 using System; namespace Operator ( class BitWiseXOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber^secondNumber; Console.WriteLine("(0) (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 14 11 = 5

Bổ sung Bitwise

Toán tử bổ sung Bitwise được đại diện bởi ~. Nó là một toán tử một ngôi, tức là chỉ hoạt động trên một toán hạng. Các ~nhà điều hành sẽ đảo ngược từng bit tức là thay đổi 1-0 và 0-1.

Ví dụ,

 26 = 00011010 (Trong nhị phân)

Hoạt động bổ sung Bitwise vào ngày 26:

 ~ 00011010 = 11100101 = 229 (Trong hệ thập phân)

Ví dụ 4: Bổ sung Bitwise

 using System; namespace Operator ( class BitWiseComplement ( public static void Main(string() args) ( int number = 26, result; result = ~number; Console.WriteLine("~(0) = (1)", number, result); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 ~ 26 = -27

Chúng tôi đã nhận được - 27như đầu ra khi chúng tôi mong đợi 229. Tại sao điều này xảy ra?

Nó xảy ra bởi vì giá trị nhị phân 11100101mà chúng ta mong đợi 229thực sự là đại diện bổ sung của 2 -27. Các số âm trong máy tính được biểu diễn trong biểu diễn phần bù của 2.

Với bất kỳ số nguyên n nào, phần bù của 2 nsẽ là -(n+1).

Bổ sung của 2
Thập phân Nhị phân 2 của bổ sung
0 00000000 - (11111111 + 1) = -00000000 = -0 (Trong hệ thập phân)
1 00000001 - (11111110 + 1) = -11111111 = -256 (Trong hệ thập phân)
229 11100101 - (00011010 + 1) = -00011011 = -27

Giá trị tràn bị bỏ qua trong phần bổ sung của 2.

Phần bù theo chiều bit của 26là 229 (trong hệ thập phân) và phần bù của 2 229-27. Do đó đầu ra -27thay vì 229.

Dịch chuyển sang trái theo chiều bit

Toán tử dịch chuyển trái bit được biểu thị bằng <<. Các <<nhà điều hành chuyển một số sang trái bởi một số quy định của bit. Các số 0 được thêm vào các bit ít quan trọng nhất.

Trong hệ thập phân, nó tương đương với

 num * 2bits

Ví dụ,

 42 = 101010 (Trong nhị phân)

Hoạt động Bitwise Lift Shift trên 42:

 42 << 1 = 84 (Trong hệ nhị phân 1010100) 42 << 2 = 168 (Trong hệ nhị phân 10101000) 42 << 4 = 672 (Trong hệ nhị phân 1010100000)

Ví dụ 5: Dịch chuyển trái theo chiều bit

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)<<1 = (1)", number, number<<1); Console.WriteLine("(0)<<2 = (1)", number, number<<2); Console.WriteLine("(0)<<4 = (1)", number, number<<4); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 42 << 1 = 84 42 << 2 = 168 42 << 4 = 672

Chuyển sang phải theo chiều bit

Toán tử dịch chuyển trái bit được biểu thị bằng >>. Các >>nhà điều hành chuyển một số sang bên phải bằng một số quy định của các bit. Toán hạng đầu tiên được chuyển sang phải theo số bit được chỉ định bởi toán hạng thứ hai.

Trong hệ thập phân, nó tương đương với

 tầng (num / 2bits)

Ví dụ,

 42 = 101010 (Trong nhị phân)

Hoạt động Bitwise Lift Shift trên 42:

 42 >> 1 = 21 (Trong nhị phân 010101) 42 >> 2 = 10 (Trong nhị phân 001010) 42 >> 4 = 2 (Trong nhị phân 000010)

Ví dụ 6: Dịch chuyển sang phải theo chiều bit

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)>>1 = (1)", number, number>>1); Console.WriteLine("(0)>>2 = (1)", number, number>>2); Console.WriteLine("(0)>>4 = (1)", number, number>>4); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 42 >> 1 = 21 42 >> 2 = 10 42 >> 4 = 2

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