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

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


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

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

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

出力 −範囲内の合計セットビット数は− 2

説明 -:数値50の2進表現は110010であり、左=2から始まりビットが1であり、右=5でビット1があり、範囲の間に0しかありません。したがって、カウントは2です。

入力 −int番号=42、左=3、右4

出力 −範囲内の合計セットビット数は− 1

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

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

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

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

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

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

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

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

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

  • また、カウントとa

    でカウントを設定します
  • カウントを印刷する

#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

  1. Cの浮動小数点数のセットビットを数える方法は?

    この問題では、1つの浮動小数点値が与えられます。バイナリ表現で設定されたビット数を見つける必要があります。 たとえば、浮動小数点数が0.15625の場合、6つのセットビットがあります。典型的なCコンパイラは、単精度浮動小数点表現を使用していました。したがって、次のようになります。 ビット値に変換するには、数値を1つのポインター変数に取り込んでから、ポインターをchar*型データに型キャストする必要があります。次に、各バイトを1つずつ処理します。次に、各文字のセットビットをカウントできます。 例 #include <stdio.h> int char_set_bit_cou

  2. C++でセットをk個のサブセットに分割する方法の数を数えます

    与えられた2つの数字eとp。目標は、セットのe個の要素をp個のパーティション/サブセットに分割できる方法の数を数えることです。 例 入力 e=4 p=2 出力 Count of number of ways to partition a set into k subsets are: 7 説明 If elements are: a b c d then ways to divide them into 2 partitions are: (a,b,c)−(d), (a,b)−(c,d), (a,b,c)−(d), (a)−(b,c,d), (