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