세트 비트를 카운팅한다는 것은 주어진 정수의 1'S를 카운팅하는 것을 의미합니다. 이를 위해 적용할 수 있는 여러 솔루션이 있습니다. 이 경우 문자열에서 1의 수를 계산해야 하는 이진수(정수의 이진 표현)가 있습니다.
1의 수를 계산하기 위해 문자열을 가져와 각 요소를 순회하고 문자열의 모든 1을 계산합니다. 예를 들어, 17을 입력하면 출력은 2가 됩니다. 왜냐하면 17의 바이너리는 2개의 1을 포함하는 10001이기 때문입니다.
Input: Enter a positive integer: 6 Output: 2
설명
6의 이진 표현은 2개의 세트 비트가 있는 110입니다.
이 반복적인 접근 방식은 비트당 한 번의 반복이 필요합니다. 숫자의 모든 비트를 통해 실행됩니다. 더 이상 비트가 설정되지 않으면 반복이 종료됩니다. 최악의 경우 최상위 비트만 설정된 32비트 워드에서 32회 반복됩니다. 이 솔루션은 1이 희소하고 최하위 비트에 속하는 경우 가장 간단하고 유용합니다.
예시
#include <stdio.h> int main(void) { unsigned int n = 34; for (c = 0; n; n >>= 1) { c += n & 1; } printf("%d\n", c); }