您需要多少位才能存储一个正整数,例如数十亿?您是否必须使用log2 N才能找到它?
答案 0 :(得分:31)
由于我已经多次错误地报告了答案,我想我会发布正确答案。
表示正整数n所需的位数是
bits = floor( log2(n) + 1 )
其中log2表示日志库2.
答案 1 :(得分:10)
是。存储在k比特中的最大数量是2 ^ k-1,因为这些比特有2 ^ k个选项,其中一个是零。
因此,存储数字N所需的位数是log2(N),但由于没有半位,因此需要将其四舍五入到上面的cloest整数。
注意:如果您需要包含负数,则该符号必须再多一位。
答案 2 :(得分:4)
只是要添加到上一个答案,您可以计算出使用任何日志库以数学方式表示数字N
需要多少位。例如,假设我想知道代表数字12345需要多少位,但我的计算器只知道ln
(自然日志)。
所以,
2^b = 12345
取双方的ln
。
ln(2^b) = ln(12345)
当然,指数的数字对数是指数乘以只有基数的对数,所以,
b*ln(2) = ln(12345)
将双方除以ln(2),
b = ln(12345) / ln(2)
当然,正如在另一个答案中所述,你需要对这个结果进行舍入,因为要表示一些数字,你需要2 ^ b等于或大于该数字。
所以,
b = ceil(ln(12345) / ln(2))
ceil(f)
将f
舍入到最接近的整数。
使用上述过程,您可以使用任何基数N
找到任何数字logb
所需的位数,即
b = ceil(logb(N) / logb(2))