題目描述 二進(jìn)制中1的個(gè)數(shù)
輸入一個(gè)整數(shù)抓狭,輸出該數(shù)二進(jìn)制表示中1的個(gè)數(shù)伦泥。其中負(fù)數(shù)用補(bǔ)碼表示胸竞。
解題思路
轉(zhuǎn)自 https://www.cnblogs.com/edisonchou/p/4752086.html
為了避免死循環(huán),我們可以不右移輸入的數(shù)字i:
⊙低啊(1)首先把i和1做與運(yùn)算累驮,判斷i的最低位是不是為1。
《娼摇(2)接著把1左移一位得到2谤专,再和i做與運(yùn)算,就能判斷i的次低位是不是1午绳。
≈檬獭(3)這樣反復(fù)左移,每次都能判斷i的其中一位是不是1拦焚。
代碼
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
uint32_t flag = 1;
while (flag >= 1)
{
if (n & flag) count++;
flag <<= 1;
}
return count;
}
};