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;
}
答案 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++;