문제는 다음과 같습니다.
지난주 스터디에 이어 아마 마지막? 비트조작 문제입니다.
그냥 맨 오른쪽 1비트부터 시작해 32비트까지 돌면서 자리수가 1인 비트를 세주면 되는 매우 쉬운 문제입니다.
제 풀이는 다음과 같습니다.
class Solution {
public:
int hammingWeight(uint32_t n) {
int b=1, cnt=0; // cnt는 1의 개수
for(int i=0; i<32; i++){
if(n & b) cnt++;
if(i==31) break;
b = b<<1;
}
return cnt;
}
};
결과계산은 변수 cnt에 담았구요,
변수 b를 1부터 시작해 왼쪽으로 shift 연산을 하여 입력받은 변수 n의 모든 비트를 확인하게됩니다.