【发布时间】:2014-07-16 11:15:23
【问题描述】:
基本上我只需要知道 int 或 unsigned int 中最高 1 位的位置。喜欢:
00001111=4;
00011111=5;
11111111=8;
因为我确信我得到的任何数字都会有连续的 1 位。 0...0000011...1 不会有 ..00010011... 什么的。所以方法可以找到最高的 1 或只计算 1。不管。
这是我能做到的最好的:
Uint32 number;
int shift=16; int segment=8;
while (segment)
{
if (number>>shift!=0) shift+=segment;
else shift-=segment;
segment>>1; // /2
}
【问题讨论】:
-
标题说“连续”,但你的例子只是寻找最高位。你能详细说明一下吗?
-
更正了问题。
-
Intel CPU 包含执行此操作的指令。
-
stackoverflow.com/questions/53161/… 在答案中寻找 Hacker's Delight
标签: c++ count bit-manipulation bit