Binary 存储一个正整数需要多少位?

Binary 存储一个正整数需要多少位?,binary,integer,Binary,Integer,您需要多少位来存储一个正整数(例如,以十亿为单位)?你需要用log2 N来找出这个吗 是的。存储在k位中的最大数为2^k-1,因为有2^k个选项用于这些位,其中一个选项为零。 因此,存储数字N所需的位数是log2(N),但由于没有半位,因此需要将其四舍五入到上面最接近的整数 注意:如果您需要包含负数,则符号必须再包含一位。只需添加到上一个答案中,您可以使用任何日志基数计算出以数学方式表示数字所需的位数。例如,假设我想知道表示数字12345需要多少位,但我的计算器只知道ln(自然日志) 所以 取两

您需要多少位来存储一个正整数(例如,以十亿为单位)?你需要用log2 N来找出这个吗

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


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

只需添加到上一个答案中,您可以使用任何日志基数计算出以数学方式表示数字所需的位数。例如,假设我想知道表示数字12345需要多少位,但我的计算器只知道
ln
(自然日志)

所以

取两边的
ln

ln(2^b) = ln(12345)
当然,指数的对数是指数乘以基数的对数,所以

b*ln(2) = ln(12345)
将两侧除以ln(2)

当然,正如在另一个答案中所说的,你需要对这个结果进行四舍五入,因为要表示某个数字,你需要2^b等于或大于这个数字

所以

其中
ceil(f)
f
四舍五入到最接近的整数

使用上述过程,您可以使用任何日志库
logb
,找到任何数字
N
所需的位数,即

b = ceil(logb(N) / logb(2))

由于我多次看到错误的答案,我想我会发布正确的答案

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

bits = floor( log2(n) + 1 )

其中log2表示对数基数2。

为整数或浮点,精度是多少?有符号还是无符号?也就是说,负整数是可能的,还是您只对表示非负整数感兴趣?(我从你的问题的上下文来看,你说的是整数,不是浮点数。)是的,我说的是正整数。那么它是log2n吗?请注意,如果您使用的是基于0的整数,其中000对应于0,111对应于7,那么您实际上需要在这个公式中添加1。为了明确@siemanko所说的内容,请使用
b=ceil(logb(N+1)/logb(2))
这个解决方案给了我一个错误的结果
N=18446744073709551615
(等于
x86_64
框上的
n=pow(2,8*sizeof(unsigned long))
,因为在这种情况下
log2(n)=64
,并且
+1
过多。使用
位=ceil(log2(n))有什么缺点吗
取而代之?正如@selurvedu指出的,尽管声称正确,但如果n是2的幂,这个答案是错误的。请使用ceil(log2(n))。@selurvedu,@superdweeble你在说什么,为什么人们喜欢你的评论?
Math.log2(16)。ceil
等于
4
,但我们需要
5
,所以
Math.log2(16).floor+1是正确的。
Math.log2((1@puchu是正确的,更喜欢这个答案,请不要对前两条评论投反对票。这个答案是错误的。请参阅以获得正确答案及其派生(证明)。例如,在Python中:
bits\u reqd\u for_num=Math.ceil(Math.log2(num+1))
b = ceil(ln(12345) / ln(2))
b = ceil(logb(N) / logb(2))
bits = floor( log2(n) + 1 )