C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の範囲内の未設定ビットをカウントします


整数、たとえばnumと、左右の値を持つ範囲が与えられます。タスクは、最初に数値の2進数を計算し、次に左の桁から右の桁までループを設定し、次に指定された範囲で未設定のビットを計算することです。

2進数の未設定ビットは0で表されます。整数値の2進数を計算するときは常に、0と1の組み合わせとして形成されます。したがって、数字の0は、コンピューターの観点からは未設定ビットとして知られています。

入力 −整数=50、左=2、右=5

出力 −範囲内の未設定ビットの総数は− 2

説明 −数値50の2進表現は110010であり、ビットが1である左=2から始まり、ビット1である右=5で終わる範囲があり、範囲の間に2つの0があります。したがって、未設定ビットの数は2です。

入力 −整数=42、左=1、右6

出力 −範囲内の未設定ビットの総数は− 3

説明 −数値42の2進表現は101010であり、左=1で始まりビットが1で、右=6でビット0で終わり、範囲の間に3つの0があります。したがって、カウントは3です。

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数型の変数と、左右の整数値の範囲に数値を入力します。

  • 変数countを宣言して、unsignedint型のセットビットの総数を格納します

  • ループFORをiから1<<7およびi>0およびiからi/2

    に開始します。
  • ループ内で、num&1 ==TRUEをチェックしてから、1を出力します。それ以外の場合は0を出力します

  • ループFORをiから左から右の値まで開始します

  • ループ内で、指定された範囲の間の合計桁数を増やします

  • ループを開始し、数値が0になるまでビットの総数を計算します

  • ループ内で、count =count + number&1を設定し、number>> =1

    も設定します。
  • 一時変数を設定します。たとえば、a with((1 <

  • また、カウントとa

    でカウントを設定します
  • 最後に、セットカウントを範囲内のビットの総数(範囲内のセットビットの総数)としてカウントします。

#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

  1. C++で長方形の正方形の数を数える

    =Bとなるように、長さL、幅Bの長方形が与えられます。目標は、サイズLXBの長方形が収容できる正方形の数を見つけることです。 上の図は、サイズ3 X 2の長方形を示しています。2、2X2の正方形、6,1X1の正方形があります。 総正方形=6+ 2=8。 サイズLXBのすべての長方形には、1X1の正方形のL*B数があります。 最大の正方形のサイズはBXBです。 L =B =1の場合、正方形=1。 L =B =2の場合、正方形=1 + 4 =5(2X2の1、1X1の4) L =B =3の場合、正方形=1 + 4 + 9 =14(3X3の​​1、2X2の4、1

  2. 範囲内の未設定ビットをカウントするPythonプログラム。

    正の数とビットの範囲が与えられます。私たちのタスクは、範囲内の未設定ビットをカウントすることです。 Input : n = 50, starting address = 2, ending address = 5 Output : 2 2〜5の範囲に「2」の未設定ビットがあります。 アルゴリズム Step 1 : convert n into its binary using bin(). Step 2 : remove first two characters. Step 3 : reverse string. Step 4 : count all unset bit 0 start