x & (x-1)

剛剛看到的一個有趣的算法,可以把X最右邊的1去除掉。

1 01111111 127
2 01111110 126
3   
4 127 & 126 = 01111110
1 01011000 88
2 01010111 87
3   
4 88 & 87 = 01010000

若要應用嘛,可用在想找出有幾個bit on的情況:

01 int quickBitcount(unsigned x)
02 {
03 int count = 0;
04   
05 while (x) 
06 {
07 x &= (x-1);
08 count++;
09 }
10 return count;
11 }

阅读更多
文章标签: 算法 2010
个人分类: C++ C
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭