소개
이 실습에서는 C 프로그래밍에서 비트 연산을 사용하여 정수에서 설정된 비트 (1) 의 개수를 세는 방법을 배웁니다. 이 실습은 세 단계로 구성됩니다: 정수 입력 읽기, 비트 연산을 사용하여 설정된 비트를 세기, 그리고 개수 출력입니다. 이 실습을 마치면 수론 및 이산수학 개념과 이를 C 프로그래밍에 적용하는 방법에 대한 이해도가 높아질 것입니다.
이 실습은 사용자로부터 정수 입력을 읽는 방법을 보여주며, 이는 비트 카운팅 연습의 첫 번째 단계입니다. 그런 다음, 주어진 정수에서 설정된 비트의 개수를 세는 데 비트 연산을 사용하는 함수를 소개합니다. 마지막으로, 프로그램은 사용자에게 설정된 비트의 개수를 표시합니다.
정수 읽기
이 단계에서는 설정된 비트를 세기 위한 C 프로그래밍에서 정수 입력을 받는 방법을 배웁니다. 정수 입력을 보여주는 간단한 프로그램을 만들어 보겠습니다.
먼저, 비트 카운팅 프로그램을 위한 C 소스 파일을 생성합니다.
cd ~/project
nano bit_counter.c
이제 다음 코드를 파일에 추가합니다.
#include <stdio.h>
int main() {
int number;
// 사용자에게 정수 입력을 요청합니다.
printf("정수를 입력하세요: ");
// 정수 입력을 읽습니다.
scanf("%d", &number);
// 입력된 숫자를 표시합니다.
printf("입력한 숫자: %d\n", number);
return 0;
}
이제 프로그램을 컴파일하고 실행해 봅시다.
gcc bit_counter.c -o bit_counter
./bit_counter
예시 출력:
정수를 입력하세요: 42
입력한 숫자: 42
코드 설명:
#include <stdio.h>는 표준 입력/출력 라이브러리를 포함합니다.scanf("%d", &number)는 사용자로부터 정수 입력을 읽습니다.printf()는 프롬프트와 입력된 숫자를 표시하는 데 사용됩니다.%d는 정수를 위한 형식 지정자입니다.
이 간단한 프로그램은 설정된 비트 카운팅 연습의 첫 번째 단계인 정수 입력을 받는 방법을 보여줍니다.
비트 연산을 사용하여 1 의 개수 세기
이 단계에서는 C 에서 비트 연산을 사용하여 정수에서 설정된 비트 (1) 의 개수를 세는 방법을 배웁니다.
이전의 bit_counter.c 파일을 수정하여 비트 카운팅을 구현해 보겠습니다.
cd ~/project
nano bit_counter.c
이전 내용을 다음 코드로 바꿉니다.
#include <stdio.h>
// 비트 연산 AND 를 사용하여 설정된 비트를 세는 함수
int countSetBits(int number) {
int count = 0;
while (number) {
// 최하위 비트를 확인합니다.
count += number & 1;
// 숫자를 오른쪽으로 비트 이동합니다.
number >>= 1;
}
return count;
}
int main() {
int number;
// 사용자에게 정수 입력을 요청합니다.
printf("정수를 입력하세요: ");
scanf("%d", &number);
// 설정된 비트의 개수를 세고 표시합니다.
int setBitCount = countSetBits(number);
printf("%d의 설정된 비트 개수: %d\n", number, setBitCount);
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc bit_counter.c -o bit_counter
./bit_counter
예시 출력:
정수를 입력하세요: 42
42의 설정된 비트 개수: 3
코드 설명:
countSetBits()함수는 비트 연산을 사용하여 설정된 비트를 셉니다.number & 1은 최하위 비트를 확인합니다 (비트가 설정되면 1, 그렇지 않으면 0 을 반환).number >>= 1은 숫자를 오른쪽으로 비트 이동하여 다음 비트로 이동합니다.- 루프는 모든 비트가 확인될 때까지 계속됩니다.
비트 연산 분석:
- 42 는 2 진수로 101010 입니다.
- 비트 위치: 1 0 1 0 1 0
- 설정된 비트 개수: 3
이 방법은 최소한의 연산 단계를 사용하여 정수에서 1 의 개수를 효율적으로 셉니다.
개수 출력
이 마지막 단계에서는 비트 카운팅 프로그램을 개선하여 더 자세한 출력을 제공하고 설정된 비트 개수를 출력하는 다양한 방법을 보여줍니다.
bit_counter.c 파일을 수정하여 더 포괄적인 출력을 추가해 보겠습니다.
cd ~/project
nano bit_counter.c
다음 구현으로 코드를 업데이트합니다.
#include <stdio.h>
// 비트 연산 AND 를 사용하여 설정된 비트를 세는 함수
int countSetBits(int number) {
int count = 0;
while (number) {
count += number & 1;
number >>= 1;
}
return count;
}
int main() {
int number;
// 사용자에게 정수 입력을 요청합니다.
printf("정수를 입력하세요: ");
scanf("%d", &number);
// 설정된 비트의 개수를 셉니다.
int setBitCount = countSetBits(number);
// 여러 형식으로 개수를 출력합니다.
printf("십진수: %d\n", number);
printf("이진수 표현: ");
// 이진수 표현 출력
for (int i = 31; i >= 0; i--) {
int bit = (number >> i) & 1;
printf("%d", bit);
}
printf("\n");
// 설정된 비트 개수 결과 출력
printf("설정된 비트 개수: %d\n", setBitCount);
printf("설정된 비트 비율: %.2f%%\n",
(float)setBitCount / 32 * 100);
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc bit_counter.c -o bit_counter
./bit_counter
예시 출력:
정수를 입력하세요: 42
십진수: 42
이진수 표현: 00000000000000000000000000101010
설정된 비트 개수: 3
설정된 비트 비율: 9.38%
코드 설명:
- 이진수 표현 출력 추가
- 설정된 비트의 백분율 계산 포함
- 비트 연산을 사용하여 개별 비트 추출
- 다양한 관점에서 비트 개수를 제공하도록 출력 형식 지정
이제 프로그램은 정수의 비트 구성에 대한 포괄적인 정보를 제공합니다.
- 십진수 값
- 전체 32 비트 이진수 표현
- 설정된 비트의 총 개수
- 설정된 비트의 백분율
요약
이 실습에서는 먼저 C 프로그래밍에서 정수 입력을 읽는 방법을 배웠습니다. 이는 사용자 입력을 받기 위해 scanf() 함수를 사용하고 입력된 숫자를 표시하기 위해 printf() 함수를 사용하는 것을 포함합니다. 다음으로, 주어진 정수에서 설정된 비트 (1) 의 개수를 계산하는 countSetBits()라는 함수를 구현했습니다. 이 함수는 숫자의 비트를 반복하여 비트 연산 AND 를 사용하여 최하위 비트를 확인하고, 그런 다음 숫자를 오른쪽으로 비트 이동하여 다음 비트로 이동합니다. 설정된 비트의 개수가 누적되어 반환됩니다.



