Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 숫자의 총 비트 수 계산하는 방법

정수형 숫자가 하나 주어졌을 때, 먼저 해당 숫자의 이진수 표현을 구하고, 그 숫자의 총 비트 수를 계산하는 것이 목표입니다.

입력 − int number = 50

출력 − 숫자의 총 비트 수 − 6

설명 − 50의 이진수 표현은 110010입니다. 만약 8자리 숫자로 계산하면 앞에 두 개의 0이 붙어 00110010이 되지만, 실제 유효한 비트는 6개이므로 총 비트 수는 6입니다.

입력 − int number = 10

출력 − 숫자의 총 비트 수 − 4

설명 − 10의 이진수 표현은 1010입니다. 8자리 숫자로 나타내면 앞에 네 개의 0이 붙어 00001010이 되며, 유효한 비트 수는 4개입니다.

프로그램에 사용된 접근 방식

  • 정수형 변수에 숫자를 입력받습니다.

  • 총 비트 수를 저장할 unsigned int 타입의 count 변수를 선언합니다.

  • i를 1 << 7부터 시작하여 i > 0인 동안 i를 i / 2로 줄여가며 FOR 루프를 실행합니다.

  • 루프 내부에서 num & i가 참(TRUE)이면 1을 출력하고, 그렇지 않으면 0을 출력하여 8비트 이진수를 표시합니다.

  • 숫자가 0이 아닐 때까지 반복하는 while 루프를 시작해 총 비트 수를 계산합니다.

  • 루프 내부에서 count 값을 1씩 증가시키고, number >>= 1로 숫자를 오른쪽으로 시프트합니다.

  • 최종적으로 count를 출력합니다.

예제 코드

#include <iostream>
using namespace std;

// 숫자의 총 비트 수 계산
unsigned int bits(unsigned int number){
    unsigned int count = 0;
    unsigned int i;
    // 8비트 이진수 표시
    cout << "8-bit digits of " << number << " is: ";
    for (i = 1 << 7; i > 0; i = i / 2){
        (number & i) ? cout << "1" : cout << "0";
    }
    // 숫자의 총 비트 수 계산
    while (number){
        count++;
        number >>= 1;
    }
    cout << "\nCount of total bits in a number are: " << count;
}

int main(){
    int number = 50;
    bits(number);
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

8-bit digits of 50 is: 00110010
Count of total bits in a number are: 6

동작 원리 정리

이 코드의 핵심은 두 가지 부분으로 나눌 수 있습니다. 첫 번째는 비트 마스크(1 << 7부터 시작해 절반씩 줄여가는 방식)를 활용해 숫자를 8비트 이진수로 화면에 출력하는 부분이고, 두 번째는 오른쪽 시프트 연산(>>= 1)을 반복하면서 숫자가 0이 될 때까지 카운트를 증가시켜 유효 비트 수를 구하는 부분입니다.

오른쪽 시프트 연산은 숫자를 2로 나누는 것과 같은 효과가 있으므로, 숫자가 0이 될 때까지 몇 번 시프트했는지 세면 그것이 곧 유효 비트의 개수가 됩니다. 예를 들어 50(110010)은 6번의 시프트 후 0이 되므로 총 비트 수는 6입니다.