19

你需要多少位来存储一个正整数,例如数十亿?您是否必须使用 log2 N 才能找出答案?

4

3 回答 3

39

由于我已经多次看到错误报告的答案,我想我会发布正确的答案。

表示正整数 n 所需的位数为

bits = floor( log2(n) + 1 )

其中 log2 表示对数基数 2。

于 2014-05-01T00:14:03.770 回答
10

是的。存储在 k 位中的最大数量是 2^k-1,因为这些位有 2^k 个选项,其中一个是零。
因此,存储一个数 N 所需的位数为 log2(N),但由于没有半位,因此需要将其向上舍入到上面最接近的整数。

注意:如果您需要包含负数,则符号必须多一位。

于 2012-09-04T18:15:12.337 回答
7

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使用上述过程,您可以使用任何 log-base找到任何 number 所需的位数logb,即

b = ceil(logb(N) / logb(2))
于 2012-09-06T13:04:09.947 回答