使用长列表

时间:2011-11-18 20:05:40

标签: c bit-manipulation bit low-level

我对单个位的操作非常不熟悉。这个问题更像是一种健全性检查:

我想要一个例如一百万个单位的列表。为此,我应该创建一个1000000/16 unsigned ints的列表。然后,通过迭代这些unsigned ints,我可以使用按位运算符将各个位设置为我想要的值。

这是对的,还是我真的很笨? 如果我走在正确的轨道上,我是否始终保证unsigned int将是16位?

3 个答案:

答案 0 :(得分:3)

不,不能保证unsigned int为16位宽。请改用uint16_t

当您说“list”时,您的意思是数组还是链表?使用数组几乎肯定比使用链表更有意义。它将带来更好的内存利用率,并可以随机访问单个字/位。

如果你需要动态增长的“长列表”,考虑一个两级结构可能是有意义的,例如指向固定大小数组的指针的增长数组(或链表) uint16_t

最后,鉴于大多数现代机器都是32位或64位,为此使用32位或64位字可能更有效。

答案 1 :(得分:2)

假设unsigned int中有16位。实际上无法保证这一点,而且现在大多数系统都至少为32.您可以sizeof( int ) * CHAR_BITS获取int中的位数。

答案 2 :(得分:1)

您始终可以检查unsigned int的大小或使用cstdint中定义的uint16_t。由于您消除了查找,因此使用数组而不是列表会更快。理想情况下,您应该在恒定时间内获得正确的整数。