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

C++의 범위에서 설정되지 않은 비트 계산

<시간/>

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

이진수에서 설정되지 않은 비트는 0으로 표시됩니다. 정수 값의 이진수를 계산할 때마다 0과 1의 조합으로 구성됩니다. 따라서 숫자 0은 컴퓨터 용어로 설정되지 않은 비트로 알려져 있습니다.

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

출력 − 범위에서 설정되지 않은 총 비트 수는 − 2

입니다.

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

입력 - 정수 =42, 왼쪽 =1, 오른쪽 6

출력 − 범위에서 설정되지 않은 총 비트 수는 − 3

입니다.

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

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

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

  • unsigned int

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

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

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

  • i에서 오른쪽 값까지 왼쪽에서 FOR 루프 시작

  • 루프 내에서 주어진 범위 사이의 총 자릿수 증가

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

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

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

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

  • 마지막으로 count를 범위의 총 비트 수 - 범위의 총 세트 비트 수로 설정합니다.

예시

#include<iostream>
using namespace std;
//Count total unset bits in a range
unsigned int unset_bits(unsigned int number, unsigned int left, unsigned int right){
   unsigned int count = 0;
   unsigned int total_bits = 0;
   unsigned i;
   //display the 8-bit number
   cout<<"8-bit number of "<<number<<" is: ";
   for (i = 1 << 7; i > 0; i = i / 2){
      (number & i)? cout<<"1": cout<<"0";
   }
   //calculate total number of bits in a given range
   for(i = left; i<=right; i++){
      total_bits++;
   }
   //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;
   //subtract set bits from the total bits in a range
   count = total_bits - count;
   cout<<"\nCount of total unset bits in a range are: "<<count;
}
int main(){
   unsigned int number = 80;
   unsigned int left = 1, right = 4;
   unset_bits(number, left, right);
   return 0;
}

출력

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

8-bit number of 80 is: 01010000
Count of total unset bits in a range are: 2