a & (a-1) ?

今天遇到了一個題目:
如何判斷一個數在內存中的1的位數;
代碼:

#include<iostream>
using namespace std;
int main(){
    int n;
    int m=0;
    while(n){
        n &= n-1;
        m++;
    }
    cout<<m<<endl;
}

由此引發了一個問題——爲什麼使用a & a-1;
經過分析,瞭解到 a & a-1的值並不重要,而是在針對於內存中的二進制存儲的影響, a & a-1所得的值,必定比a在內存中1的個數少一位,這纔是問題的本質所在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章