我需要创建一个例程来计算不涉及循环(仅位操作)并且不使用大常量的字中的位。
int x = 0xFFFFFFFF;
x += (~((x >> 1) & 0x55555555)+1);
x = (((x >> 2) & 0x33333333) + (x & 0x33333333));
x = (((x >> 4) + x) & 0x0F0F0F0F);
x += (x >> 8);
x += (x >> 16);
return(x & 0x0000003F);
这是我在一些小技巧上发现的,但我可以使用的最大常数是 0xFF ... 不知道该怎么做。
谢谢各位。