首页 > 其他 > 详细

神奇的 i & (i-1)

时间:2020-05-17 20:17:20      阅读:45      评论:0      收藏:0      [点我收藏+]
#include <stdio.h>

int fun(int i) 
{ 
    int cnt = 0; 
    while(i) 
    { 
        cnt++; 
        i = i&(i-1); 
    } 
    
    return cnt; 
} 

int main()
{ 
    printf( "%d\n", fun(2017) );
    
    return 0;  
}
&是按位与,对应位都为1时该位得1,否则得0。
所以 i&(i-1) 的作用:将i的二进制表示中的最低位为1的改为0。

在本题中即数出2017转换成二进制有几个1就会走几次循环。
2017对应的二进制是:10000111111,一共7个1,故走7次。

拓展:(n > 0 && ((n & (n - 1)) == 0)是判断n是不是2的次幂

神奇的 i & (i-1)

原文:https://www.cnblogs.com/jaszzz/p/12906537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!