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

C ++を使用して、数値の指定された位置またはインデックスのビットを更新します


与えられた問題では、数の与えられたインデックスのビットを更新する必要があります。番号を更新するには、特定の番号に対してビット操作操作を使用できます。たとえば、

入力-1

N= 25
bit= 1
position= 2

出力

29

説明 −指定された入力25は「11001」としてバイナリで書き込むことができるのに対し、位置インデックスは「2」でビットは「1」です。指定された位置の数字を置き換えると、出力は「11101」になります。これは「29」に相当します。

この問題を解決するためのアプローチ

数値の指定された位置またはインデックスで、タスクは入力で指定された特定のビットでビットを更新することです。指定された位置のビットを更新する方法は、最初に指定された位置のビットをクリアしてから、バイナリAND演算を実行してビットを更新することです。

  • 数値N、ビットを「ビット」として更新し、ビットを「位置」として更新する必要がある位置またはインデックスを入力します。

  • void関数updateBit(int&n、int bit、int position)は、現在のビットのアドレス、ビット値、およびビットのインデックスを取得します。この関数は、ビットを指定された値に置き換えることにより、数値の更新された値を出力します。

  • 指定された位置のビットをクリアし、結果のビットを結果に追加します。

  • マスクを作成し、結果を使用してAND演算を実行します。

  • 作成したマスクを使用してバイナリOR演算を実行し、インデックスで更新する値を使用して右シフト演算を実行します。

#include<iostream>
using namespace std;
void updateBit(int &n,int bit, int pos){
   int clearBit= ~(1<<pos);
   int mask= n & clearBit;
   n= mask |(bit<<pos);
}
int main(){
   int n=25;
   int bit=1;
   int pos=2;
   updateBit(n,bit,pos);
   cout<<n;
}

出力

上記のコードを実行すると、次のように出力が生成されます

29

入力は25なので、バイナリ表現では11001です。 「2」の位置を「1」に置き換えると、バイナリの11101、つまり29になります。


  1. 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になります。

  2. C ++を使用して、配列内の数値の頻度を見つけます。

    配列があるとします。 n個の異なる要素があります。配列内の1つの要素の頻度を確認する必要があります。 A =[5、12、26、5、3、4、15、5、8、4]とすると、5の頻度を見つけようとすると、3になります。 これを解決するために、左から配列をスキャンします。要素が指定された数と同じである場合は、カウンターを増やします。それ以外の場合は、配列がなくなるまで次の要素に進みます。 例 #include<iostream> using namespace std; int countElementInArr(int arr[], int n, int e) {   &nbs