如何计算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?