Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 범위의 세트 비트 수 계산


예를 들어 정수, num 및 왼쪽 및 오른쪽 값이 있는 범위가 제공됩니다. 작업은 먼저 숫자의 2진수를 계산한 다음 왼쪽 숫자에서 오른쪽 숫자까지 루프를 설정한 다음 지정된 범위에서 설정된 비트를 계산하는 것입니다.

이진수의 세트 비트는 1로 표시됩니다. 정수 값의 이진수를 계산할 때마다 0과 1의 조합으로 구성됩니다. 따라서 컴퓨터 용어로 1자리를 세트비트라고 합니다.

입력 - 정수 =50, 왼쪽 =2, 오른쪽 =5

출력 − 범위의 총 설정 비트 수는 − 2

입니다.

설명 -:숫자 50의 이진 표현은 110010이고 왼쪽 =2에서 시작하여 비트가 1이고 오른쪽 =5로 끝나는 범위가 있으며 비트 1이 있고 범위 사이에는 0만 있습니다. 따라서 개수는 2입니다.

입력 - 정수 =42, 왼쪽 =3, 오른쪽 4

출력 − 범위의 총 설정 비트 수는 − 1

입니다.

설명 − 숫자 42의 이진 표현은 101010이고 왼쪽 =3에서 시작하여 비트가 1이고 오른쪽 =4로 끝나는 범위가 있으며 비트 0이 있고 그 사이에는 한 자리만 있습니다. 따라서 개수는 1입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 정수형 변수에 숫자를 입력하고, 좌우 정수값의 범위도 입력합니다.

  • unsigned int

    유형의 세트 비트의 총 개수를 저장하기 위해 변수 개수를 선언합니다.

  • 시작 루프 FOR i에서 1<<7 및 i> 0 및 i에서 i / 2

  • 루프 내에서 num &1 ==TRUE를 확인한 다음 1을 인쇄하고 그렇지 않으면 0을 인쇄합니다.

  • 숫자가 0이 아닐 때까지 총 비트 수를 계산하는 동안 루프 시작

  • 루프 내에서 count =count + number &1로 설정하고 number>>=1

    도 설정합니다.
  • 다음과 같이 임시 변수를 설정합니다. a with ((1 <

  • 또한 count &로 count를 설정하십시오.

  • 카운트 인쇄

예시

#include<iostream>
using namespace std;
//Count total bits in a range
unsigned int bits(unsigned int number, unsigned int left, unsigned int right){
   unsigned int count = 0;
   unsigned i;
   //display the total 8-bit number
   cout<<"8-bit digits of "<<number<<" is: ";
   for (i = 1 << 7; i > 0; i = i / 2){
      (number & i)? cout<<"1": cout<<"0";
   }
   //calculate the total bits in a number
   while (number){
      count += number & 1;
      number >>= 1;
   }
   //calculate the set bit in a range
   int a = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1);
   count = count & a;
   cout<<"\nCount of total set bits in a range are: "<<count;
}
int main(){
   unsigned int number = 42;
   unsigned int left = 2, right = 5;
   bits(number, left, right);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

8-bit digits of 42 is: 00101010
Count of total set bits in a range are: 2