Tôi đang cố gắng tối ưu hóa một số quy trình đóng gói và giải nén bit. Để thực hiện việc đóng gói, tôi cần tính toán số bit cần thiết để lưu trữ các giá trị số nguyên. Đây là mã hiện tại.Cách nhanh nhất để tính số lượng bit cần thiết để lưu trữ một số
if (n == -1) return 32;
if (n == 0) return 1;
int r = 0;
while (n)
{
++r;
n >>= 1;
}
return r;
Tôi hy vọng bạn không cố nén dữ liệu và đặt trước từng giá trị bằng số lượng bit trong giá trị. – Skizz
Khi bạn viết "32", tôi đoán bạn có nghĩa là sizeof (int) * CHAR_BIT. Bạn có muốn mã của bạn hoạt động ở nơi sizeof (int) == 8 không? –
Nếu bạn đang sử dụng >>, bạn thực sự muốn n được unsigned. –