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

C++の数値のK番目のセットビットの位置


この問題では、2つの整数NとKが与えられます。私たちのタスクはK th のインデックスを見つけることです。 右から数えてNのビットを設定します。

セットビットは、数値の2進表現からチェックされます。バイナリ表現でのインデックス付けは、インデックス0から右方向から始まり、左方向に伝播します。

− 2進数「011101」では、右からインデックス0に1があり、右からインデックス1に0があります。

それでは、問題を理解するために例を見てみましょう

入力 − n =6、K =2

出力 − 2

説明 −6の2進表現は0110です。右から2番目のセットビットはインデックス2になります。

この問題を解決するには、現在のビットが設定されているかどうかを確認する必要があります。設定されている場合は、Kの値を減らします。確認するたびに、数値bt 1をシフトします。これにより、次のビットが得られます。実行されたシフトの数を維持します。 Kの値が0になると、実行されたシフトの数が出力されます。

ロジックの実装を示すプログラム

#include <iostream>
using namespace std;
int FindIndexKthBit(int N, int K) {
   int index=0;
   while (N) {
      if (N & 1)
         K--;
      if (!K)
         return index;
      index++;
      N = N >> 1;
   }
   return -1;
}
int main() {
   int N = 12, K = 2;
   cout<<"The "<<K<<"th set bit of the number "<<N<<" is at index : \t";
   int index = FindIndexKthBit(N, K);
   if (index!=-1)
      cout<<index;
   else
      cout<<"\nsorry no index found";
   return 0;
}

出力

The 2th set bit of the number 12 is at index : 3

  1. C++を使用してセットの反射関係の数を見つける

    この記事では、集合上の反射関係の数を見つけるためのアプローチについて説明します。この問題では、数nが与えられ、n個の自然数のセットで、反射関係の数を決定する必要があります。 反射関係 −集合Aの関係は、(a、a)が集合Aに属するすべてのaがRに属する場合、反射的と呼ばれます。たとえば、- Input : x = 1 Output : 1 Explanation : set = { 1 }, reflexive relations on A * A : { { 1 } } Input : x = 2 Output : 4 Explanation : set = { 1,2 }, reflex

  2. C++で数値の最上位セットビットを検索します

    ここでは、数値が指定されているかどうか、次に設定されている最上位ビット値の値を見つける方法を確認します。値は2の累乗です。したがって、数値が10の場合、MSB値は8になります。 MSBの位置を見つけてから、k番目の位置にビットを設定して数値の値を見つける必要があります。 例 #include<iostream> #include<cmath> using namespace std; int msbBitValue(int n) {    int k = (int)(log2(n));    return (int)(pow(2