【发布时间】:2012-09-13 17:25:48
【问题描述】:
假设一个 32 位无符号整数(可推广到任何大小的答案当然更好)。
可以假设这个整数是 2 的幂,所以只设置了一位。
我想设置整数中的所有位,除了那些低于设置位的位。因此(为简洁起见,使用 8 位整数)00001000 将变为 11111000。
这当然可以通过找到一个设置位然后遍历更高位并设置它们来完成。假设highest_set返回最高设置位的位置:
uint32_t f(uint32_t x)
{
int n = highest_set(x);
for (int i = 31; i != n; --i) {
x |= 1 << i;
}
return x;
}
f 的运行时间确实取决于x 的值,我觉得有一个更聪明的方法来做到这一点。
【问题讨论】:
标签: binary integer bit-manipulation