我了解到为了确定表示数字 n 所需的位数是通过取n的对数,即 log(n)
(基数) 2)。但是,我不相信!看看我的例子:
如果是n=4
,那么我需要log4 = 2 bits
代表4,但是4是(100)二进制,显然是3位!!
有人可以解释原因吗? 谢谢。
答案 0 :(得分:1)
你确定你不是在谈论n位安排吗?
有2位,你有4个不同的序列:
std::list<Stimulation*> configuration;
数字4实际上是二进制的100,但我怀疑你混合了这些概念。
答案 1 :(得分:1)
对于大多数直接方案,您将ceil(log2(N+1))
与log2
表示为浮动。
在纯积分中,一个天真的方案是将(积分div,因此截断)数除以2直到得到零的结果(例如4/2 = 2,2 / 2 = 1,1 / 2 = 0 - 三个除以零,因此需要3位。
更多advanced schemes exist,但走这条路可能会损害你的性能 - 现代CPU有instructions来检测msb设置为1的位置,这些指令需要很少的CPU周期