C ++の範囲のビット単位および(または&)
この問題では、2つの整数値aとbが与えられます。そして、私たちのタスクは、 aからbまでの範囲のビット単位および(&)を見つけることです。 。これは、a&a + 1&a + 2&…b-1&bの値を見つける必要があることを意味します。
問題を理解するために例を見てみましょう
入力 − a =3、b =8
出力 − 0
説明 − 3&4&5&6&7&8 =0
この問題を解決するための簡単な解決策は、aから始めて、1をbに増やすことにより、ビット単位ですべての数値を見つけることです。
より効果的なソリューション
これはより効果的な解決策です。これは-
を使用して実行できます。ステップ1 −bのLSBを反転します。
ステップ2 −数値をaおよびbと比較し、範囲内にあるかどうかを確認します。
ステップ2.1 −数値がそのLSBゲインのフリップよりも大きい場合。
ステップ2.2 −それがthen number=resultより大きくない場合。
さあ、しましょう の動作中の上記のアルゴリズムを参照してください-
例 − a=3およびb=8。
解決策 −
ステップ1 − b =8(1000)、数の中で唯一のLSBを反転します。数は0000、つまり0になります
ステップ2 − 0は3未満であり、0は結果です。
例
それでは、問題を解決するためのコードを見てみましょう。
#include <stdio.h> int main(){ long a, b; a = 3; b = 8; do{ b -= (b & -b); }while(a < b); printf("%li", b); }
出力
0
-
Cで割り切れる最大の正の整数であり、C ++では[A、B]の範囲にあります
ここで、1つの興味深い問題が発生します。 3つの整数A、B、およびCがあると考えてみましょう。XmodC =0であり、Xが[A、B]の範囲にないように、1つの最小整数Xを見つける必要があります。 A、B、Cの値がそれぞれ5、10、4の場合、Xの値は4になります。解を得るには、次の手順に従う必要があります- 手順- Cが[A、B]の範囲にない場合は、結果としてCを返します それ以外の場合は、Bより大きいCの最初の倍数を取得し、その値を返します 例 #include <iostream> using namespace std; int findMinMumber(
-
C ++のビットごとのANDとは何ですか?
ビットごとのAND演算子(&)は、第1オペランドの各ビットを第2オペランドの対応するビットと比較します。両方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0に設定されます。ビット単位の包括的AND演算子の両方のオペランドは、整数型である必要があります。たとえば、 例 #include <iostream> using namespace std; int main() { unsigned short a = 0x5555;