小智 36
由于我已经看到错误报告的答案很多次,我想我会发布正确答案.
表示正整数n所需的位数是
bits = floor( log2(n) + 1 )
Run Code Online (Sandbox Code Playgroud)
其中log2表示日志库2.
Lee*_*Gup 10
是.存储在k比特中的最大数量是2 ^ k-1,因为比特有2 ^ k个选项,其中一个是零.
因此,存储数字N所需的位数是log2(N),但由于没有半位,因此需要将其四舍五入到上面的cloest整数.
注意:如果您需要包含负数,则该符号必须再多一位.
只需添加到上一个答案,您就可以找出N使用任何对数基数来数学表示一个数字所需的位数。例如,假设我想知道代表数字12345所需的位数,但是我的计算器只知道ln(自然对数)。
所以,
2^b = 12345
Run Code Online (Sandbox Code Playgroud)
考虑到ln双方。
ln(2^b) = ln(12345)
Run Code Online (Sandbox Code Playgroud)
当然,对数的对数是指数乘以仅对数的对数,因此,
b*ln(2) = ln(12345)
Run Code Online (Sandbox Code Playgroud)
将两边除以ln(2),
b = ln(12345) / ln(2)
Run Code Online (Sandbox Code Playgroud)
当然,正如其他答案所述,您将需要四舍五入该结果,因为要表示某个数字,您需要2 ^ b等于或大于该数字。
所以,
b = ceil(ln(12345) / ln(2))
Run Code Online (Sandbox Code Playgroud)
当ceil(f)舍f到最接近的整数。
使用以上过程,您可以N使用任何log-base 找到任意数量所需的位数logb,即
b = ceil(logb(N) / logb(2))
Run Code Online (Sandbox Code Playgroud)