如何计算c中没有循环的字节数?

可能重复:
计算32位整数中设定位数的最佳算法?

你好,

有没有更简洁的方式来计算一个字节中的数量而不使用循环? 如果我不需要,我不想做以下事情。 谢谢。

char myValue = 0x0F;

int counter = 0;

while (myValue > 0)
{
 if (myValue & 0x01)
 {
  counter ++;
 }

 myValue = myValue >> 1;
}

 ((i>>3)&1)+((i>>2)&1)+((i>>1)&1)+(i&1)

或使用组件(SSE / MMX)。 http://gurmeet.net/puzzles/fast-bit-counting-routines/


如果您正确初始化表,这将起作用。

static const unsigned char one_bits_in_byte[] = { 0, 1, 1, 2, 1, ... };

int counter = one_bits_in_byte[myValue & 0xFF];

当然,你会编写一个带有循环的程序来生成表格,以便你的最终程序没有循环。 如果您有成本意识,则可以将数据编码为0..15,并使用移位处理值的两半(nybbles)。 但具有24 GB的物理内存,这不太可能是一个主要问题。 你也可以用屏蔽操作等简单地计算出需要的值(如VGE所示,但扩展到整个字节)。

链接地址: http://www.djcxy.com/p/72593.html

上一篇: How to count the number of ones in a byte without a loop in c?

下一篇: Finding out no bits set in a variable in faster manner