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 # BitwiseNhà đ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)
OR
Hoạ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 - 27
như đầ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 11100101
mà chúng ta mong đợi 229
thự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 n
sẽ là -(n+1)
.
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 26
là 229 (trong hệ thập phân) và phần bù của 2 229
là -27
. Do đó đầu ra -27
thay 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