C++で整数のセットビットをカウントします
整数、たとえばnumが与えられ、タスクは最初に数値の2進数を計算し、次に数値の合計セットビットを計算することです。
2進数のセットビットは1で表されます。整数値の2進数を計算するときは常に、0と1の組み合わせとして形成されます。したがって、数字1は、コンピューターの観点からはセットビットとして知られています。
入力 −int番号=50
出力 −数値の合計セットビット数は− 3
説明 −数値50の2進表現は110010であり、8桁の数値で計算すると、最初に2つの0が追加されます。したがって、数値の合計セットビットは3です。
入力 −int番号=10
出力 −数値の合計セットビット数は− 2
説明 −数値10の2進表現は00001010であり、8桁の数値で計算すると、最初に4つの0が追加されます。したがって、数値の合計セットビットは2です。
以下のプログラムで使用されているアプローチは次のとおりです
-
整数型の変数に数値を入力してください
-
変数countを宣言して、unsignedint型のセットビットの総数を格納します
-
ループFORをiから1<<7およびi>0およびiからi/2
に開始します。 -
ループ内で、num&1 ==TRUEをチェックしてから、1を出力します。それ以外の場合は0を出力します
-
ループを開始し、数値が0になるまでビットの総数を計算します
-
ループ内で、count =count + number&1を設定し、number>> =1
も設定します。 -
カウントを印刷する
例
#include<iostream> using namespace std; //Count total set bits in a number unsigned int bits(unsigned int number){ 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 set bits in a number while (number){ count += number & 1; number >>= 1; } cout<<"\nCount of total set bits in a number are: "<<count; } int main(){ int number = 50; bits(number); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
8-bit digits of 50 is: 00110010 Count of total set bits in a number are: 3
-
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), (