今天遇到了一個題目:
如何判斷一個數在內存中的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的個數少一位,這纔是問題的本質所在。