注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水居

云在青山水在天,人在江湖不得闲

 
 
 

日志

 
 

神奇的位运算  

2010-12-14 17:04:50|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

查看全文


1。计算一个整数的二进制中1的个数
2。计算一个整数的二进制中末尾0的个数
3。判断一个整数是否是2的n次幂
4。计算比一个整数大的最小的2的n次幂
5。交换两个整数
6。计算一个整数的绝对值
7。计算两个整数中的较小值和较大值
计算一个整数的二进制中1的个数
unsigned int v; // 整数
unsigned int c; // 运算结果
for (c = 0; v; c++){
    v &= (v - 1); // 清空最低的1比特位,v&-v即是最低的比特位,所以这句也可以写成v-=(v&-v)
}
计算一个整数的二进制中末尾0的个数
unsigned int v;  // 整数
int r;           // 运算结果
static const int MultiplyDeBruijnBitPosition[32] ={
  0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
  31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531

查看全文

  评论这张
 
阅读(702)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018