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

Chương trình C# đếm tổng số bit của một số

Tính số bit cần thiết để biểu diễn một số nguyên dương trong nhị phân (độ dài bit). Ví dụ: 12 = 1100₂ → 4 bit.

Công thức toán học

Số bit = ⌊log₂(n)⌋ + 1 (với n > 0)

Mã nguồn

using System;

public class Demo {
    public static void Main() {
        uint val = 12; // 1100 nhị phân
        
        // Công thức: log2(val) + 1
        uint bits = (uint)Math.Log(val, 2.0) + 1;
        
        Console.WriteLine("Số: " + val);
        Console.WriteLine("Tổng bit: " + bits);
    }
}

Kết quả

Số: 12
Tổng bit: 4

Cách không dùng Math.Log (bitwise)

int CountBits(uint n) {
    if (n == 0) return 1; // 0 = "0" (1 bit)
    int count = 0;
    while (n > 0) {
        count++;
        n >>= 1;
    }
    return count;
}

Cách hiện đại (.NET 5+)

using System.Numerics;

// Trả về số bit cần thiết (không tính bit dấu)
int bits = BitOperations.Log2(val) + 1;
// Hoặc cho signed
int bits = sizeof(int) * 8 - BitOperations.LeadingZeroCount(val);

Bảng tham khảo

Số (dec)Nhị phânSố bit
001
111
2102
71113
810004
1211004
255111111118
2561 0000 00009

Lưu ý

  • Math.Log(val, 2) dùng floating-point — có thể sai do độ chính xác (vd: Math.Log(8,2) = 2.999999...). Thêm 1e-10 trước khi cast.
  • Chỉ áp dụng cho số nguyên dương. Số 0 cần xử lý riêng (log(0) = -∞).
  • BitOperations.Log2 trả về ⌊log₂(x)⌋ chính xác, không lo lỗi float.