Toán tử bitwise thao tác trực tiếp trên các bit (0/1) của biểu diễn nhị phân. Toán tử bit shift dịch chuyển bit trái/phải.
Giả sử: a = 60 (0011 1100), b = 13 (0000 1101)
Bảng toán tử
| Toán tử | Tên | Mô tả | Ví dụ (a=60, b=13) |
|---|---|---|---|
& | Bitwise AND | Bit = 1 nếu CẢ HAI đều 1 | a & b = 12 (0000 1100) |
| | Bitwise OR | Bit = 1 nếu ÍT NHẤT MỘT là 1 | a | b = 61 (0011 1101) |
^ | Bitwise XOR | Bit = 1 nếu CHÍNH XÁC MỘT là 1 | a ^ b = 49 (0011 0001) |
~ | Bitwise NOT (One's Complement) | Đảo ngược tất cả bit (0↔1) | ~a = -61 (1100 0011 bù 2) |
<< | Left Shift | Dịch trái, bit thấp thêm 0 | a << 2 = 240 (1111 0000) |
>> | Right Shift | Dịch phải, bit cao: signed=sign bit, unsigned=0 | a >> 2 = 15 (0000 1111) |
Mã nguồn minh họa
using System;
namespace MyApplication {
class Program {
static void Main(string[] args) {
int a = 60; // 0011 1100
int b = 13; // 0000 1101
int c = 0;
c = a & b; Console.WriteLine("a & b = {0}", c); // 12
c = a | b; Console.WriteLine("a | b = {0}", c); // 61
c = a ^ b; Console.WriteLine("a ^ b = {0}", c); // 49
c = ~a; Console.WriteLine("~a = {0}", c); // -61
c = a << 2; Console.WriteLine("a << 2 = {0}", c); // 240
c = a >> 2; Console.WriteLine("a >> 2 = {0}", c); // 15
Console.ReadLine();
}
}
}
Kết quả
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
Ứng dụng thực tế
- Flags/Enum:
[Flags] enum Permissions { Read=1, Write=2, Execute=4 }— dùng&,|,^,~kiểm tra/set/xóa flag. - Bit masking: Lấy/đặt bit cụ thể:
(val & (1<(kiểm tra), val |= (1<(set), val &= ~(1<(clear). - Fast math:
x << 1= x*2,x >> 1= x/2 (cho unsigned/positive). - Hashing, compression, crypto, graphics: thao tác bit cấp thấp.
- Network protocols: parse header, flag bits.
Lưu ý
>>trên signed integer là arithmetic shift (giữ bit dấu) —-8 >> 1 = -4.- Trên unsigned (
uint,ulong) là logical shift (điền 0). - Dịch trái
<<có thể overflow — C# không check trừ khi trongcheckedcontext. - Ưu tiên
System.Numerics.BitOperations(.NET Core 3.0+) cho: PopCount, LeadingZeroCount, RotateLeft/Right, Log2.