这个位操作函数有什么作用?

时间:2011-12-26 15:45:24

标签: bit-manipulation

unsigned long ccNextPOT(unsigned long x){

    x = x - 1;
    x = x | (x >> 1);
    x = x | (x >> 2);
    x = x | (x >> 4);
    x = x | (x >> 8);
    x = x | (x >>16);
    return x + 1;
}

2 个答案:

答案 0 :(得分:2)

OR和SHIFT语句在最高有效位(最多32位)的右侧填充x的所有位。与预递减和后递增语句一起,计算(作为函数名称建议)下一个二次幂数,等于或大于给定数(如果x大于0且更少比2 ^ 32)

答案 1 :(得分:0)

此函数将x向上舍入到下一个最高2的幂。这正是here中的代码

unsigned int v; // compute the next highest power of 2 of 32-bit v

v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;