我得知,以便确定代表一个数Ñ是通过取n的对数所需的位的数目,即log(n)
(基数为2)。但是,我不相信!看看我的例子:知道的比特数来表示数
if if n=4
,那么我需要log4 = 2 bits
来表示4,但是4是(100)在二进制中显然是3位!
有人可以解释为什么吗? 谢谢。
我得知,以便确定代表一个数Ñ是通过取n的对数所需的位的数目,即log(n)
(基数为2)。但是,我不相信!看看我的例子:知道的比特数来表示数
if if n=4
,那么我需要log4 = 2 bits
来表示4,但是4是(100)在二进制中显然是3位!
有人可以解释为什么吗? 谢谢。
对于最直接的方案,您采取ceil(log2(N+1))
与log2
表示为浮动。
在纯积分中,一个天真的方案是将数除以2(直到得到零结果)(例如4/2 = 2,2/2 = 1,1/2 = 0 - 三个分区变为零,因此需要3个比特)。
更多advanced schemes exist,但走这条路可能会伤害你的表现 - 现代CPU-es有instructions来检测一个数字的msb设置为1的位置,这些指令需要很少的CPU周期。
实际上它是'ceil(log2(N + 1))',这就是OP错误的地方。 – biziclop
更正,谢谢 –
downvote!有什么不对?提前对不起 – Kris
是的,我可以解释它!你所学到的是错误的*。忘掉它吧。用'k'位可以表示从'0'到'2^k-1'的数字。唉,'2^k'超出这个范围。也许你想知道,你需要确切的'log(n)'位来表示每个自然数*小于'n' *。为了包含'n',你*可能需要另外一点。 –
@ n.m。非常感谢你。现在很清楚。欣赏它 – Kris