Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Toán tử Bitwise và Bit Shift trong C#

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ênMô tảVí dụ (a=60, b=13)
&Bitwise ANDBit = 1 nếu CẢ HAI đều 1a & b = 12 (0000 1100)
|Bitwise ORBit = 1 nếu ÍT NHẤT MỘT là 1a | b = 61 (0011 1101)
^Bitwise XORBit = 1 nếu CHÍNH XÁC MỘT là 1a ^ 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 ShiftDịch trái, bit thấp thêm 0a << 2 = 240 (1111 0000)
>>Right ShiftDịch phải, bit cao: signed=sign bit, unsigned=0a >> 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 trong checked context.
  • Ưu tiên System.Numerics.BitOperations (.NET Core 3.0+) cho: PopCount, LeadingZeroCount, RotateLeft/Right, Log2.