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ân | Số bit |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 1 | 1 |
| 2 | 10 | 2 |
| 7 | 111 | 3 |
| 8 | 1000 | 4 |
| 12 | 1100 | 4 |
| 255 | 11111111 | 8 |
| 256 | 1 0000 0000 | 9 |
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êm1e-10trước khi cast.- Chỉ áp dụng cho số nguyên dương. Số 0 cần xử lý riêng (log(0) = -∞).
BitOperations.Log2trả về⌊log₂(x)⌋chính xác, không lo lỗi float.