数字中总位数的对数解背后的解释是什么?

What's the explanation behind logarithmic solution of count total bits in a number?

统计总数的方法有很多种。数字的位和以下是其中之一:-

int total_bits=log2(num)+1;

你能解释一下,log2(num)加1有什么用?

感谢和问候

n为正整数。设 k 为它的位数。

然后 nk 由这个数学关系链接:

2^(k-1) ≤ n < 2^k

其中 ^ 表示求幂。

现在,对数是严格递增的函数,所以这个关系等价于:

log2(2^(k-1)) ≤ log2(n) < log2(2^k)

并且由于 log2 恰好是 2^... 的反函数,因此等同于:

k-1 ≤ log2(n) < k

或等价地:

k ≤ log2(n) + 1 < k+1

也就是说,整数klog2(n) + 1的整数部分。我们可以这样写:

k = floor(log2(n) + 1)

或C语言:

int k = log2(n) + 1;

注:在这个回答中,我用^来表示求幂。在大多数编程语言中,^ 表示按位异或,与指数完全无关。请小心并避免在程序中使用 ^ 作为指数。

这不计算位数,但它可能会也可能不会 return 设置的最高位的索引。

“可能会或可能不会”,因为舍入错误:首先,log2(65536) 可能不是 return 16,而是 15.999999999999999999999,在这种情况下,您会得到错误的答案。其次,如果你需要这个用于 64 位数字,那么我可以保证 log2(0x8000_0000_0000_0000) 或 log2(0x7fff_ffff_ffff_ffff) 会给出错误的结果。