位运算技巧 大总结 - 探路者 - CSDN博客
来源:百度文库 编辑:神马文学网 时间:2024/05/05 02:13:58
sky 注:http://graphics.stanford.edu/~seander/bithacks.html 更详细 位运算技巧 大总结 收藏 首先,老牛的blog里有一个。
1: 判断一个整数是否为2的幂
!x&(x-1)
参考:
2:统计一个整数的二进制中1的个数
http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Fpeterniu121
1: 判断一个整数是否为2的幂
!x&(x-1)
参考:
2:统计一个整数的二进制中1的个数
http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Fpeterniu121
int CountNumberOfOne(int number)
{
int counter = 0;
while (number)
{
counter++;
number &= number - 1 ;
}
return counter;
}
3:判断一个数 是否是 2的30次幂
bool is_2_pow30( int x )
{
//return x&(0x1<<30) && !(x&~(0x1<<30)); // 可行
return !(x&(x-1)) && (x&0x1<<30); // 也可行
}
测试:
cout<
2: 判断一个连续的4个字节内存里面是否有某个字节的bit位全为0
参考strlen或strcpy的C库源码
-:判断一个数的最左侧bit的位置。说明时间复杂度。
1)循环左移测试最高位
2)折半测试。。。具体怎么实现还不明确。