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

Toán tử dịch phải bitwise (Right Shift) trong C#

Toán tử >> (Right Shift) dịch chuyển các bit của toán hạng trái sang phải n vị trí (toán hạng phải).

Quy tắc

  • Signed integer (int, long): Arithmetic shift — bit dấu (MSB) được複製 (sign extension). Ví dụ: -8 >> 1 = -4.
  • Unsigned integer (uint, ulong): Logical shift — bit cao được điền 0. Ví dụ: 0x80000000u >> 1 = 0x40000000.

Ví dụ: 60 >> 2

60 (dec) = 0011 1100 (bin)
Dịch phải 2:
0000 1111 = 15 (dec)

Mã nguồn


using System;

namespace Demo {
    class Program {
        static void Main() {
            int a = 60;  // 0011 1100
            int b = a >> 2; // 0000 1111 = 15
            
            Console.WriteLine("a = {0} (0b{1})", a, Convert.ToString(a, 2).PadLeft(8, '0'));
            Console.WriteLine("a >> 2 = {0} (0b{1})", b, Convert.ToString(b, 2).PadLeft(8, '0'));
            Console.ReadLine();
        }
    }
}

Kết quả


a = 60 (0b00111100)
a >> 2 = 15 (0b00001111)

Ứng dụng

  • Chia nhanh cho 2ⁿ (chỉ số nguyên dương): x >> n ≈ x / (1 << n).
  • Trích xuất bit: (value >> pos) & 1 lấy bit tại vị trí pos.
  • Bit masking: Dịch để align mask.
  • Fixed-point math: Q-format scaling.

Lưu ý

  • Khác với toán học: -5 >> 1 = -3 (arithmetic shift), nhưng -5 / 2 = -2 (truncation toward zero).
  • Dịch quá số bit của kiểu (vd: int >> 32) → C# chỉ lấy 5 bit thấp của shift count (count & 0x1F cho int, & 0x3F cho long).
  • Không dùng cho float/double — dùng Math.ScaleB hoặc nhân/chia.