打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
位运算技巧大总结
 
位运算技巧 大总结 收藏
 
首先,老牛的blog里有一个。

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<<is_2_pow30( 1 )<<endl;
 cout<<is_2_pow30( 1<<30 )<<endl;
 cout<<is_2_pow30( (1<<30) + (1<<29) )<<endl;
输出 0,1,0;

2: 判断一个连续的4个字节内存里面是否有某个字节的bit位全为0
  参考strlen或strcpy的C库源码

-:判断一个数的最左侧bit的位置。说明时间复杂度。
    1)循环左移测试最高位
    2)折半测试。。。具体怎么实现还不明确。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
产生在球面上均匀分布的点
273 类的作用域
通讯录排序
C++ 数字
C与C++输入输出格式比较
如何计算二维数组大小?? - C/C++ / C语言
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服