C++での数値範囲のビットごとのAND
範囲[m、n]があり、0 <=m <=n<=2147483647であるとします。この範囲内のすべての数値のビットごとのANDを見つける必要があります。したがって、範囲が[5、7]の場合、結果は4になります。
これを解決するには、次の手順に従います-
-
i:=0
-
mがnでない場合、
-
m:=m / 2、n:=n / 2、iを1増やします
-
-
左にi回シフトした後、mを返します。
例(C ++)
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int rangeBitwiseAnd(int m, int n) { int i = 0; while(m != n){ m >>= 1; n >>= 1; i++; } return m << i; } }; main(){ Solution ob; cout << (ob.rangeBitwiseAnd(5,7)); }
入力
5 7
出力
4
-
C ++のビットごとのANDとは何ですか?
ビットごとのAND演算子(&)は、第1オペランドの各ビットを第2オペランドの対応するビットと比較します。両方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0に設定されます。ビット単位の包括的AND演算子の両方のオペランドは、整数型である必要があります。たとえば、 例 #include <iostream> using namespace std; int main() { unsigned short a = 0x5555;
-
Pythonで指定された範囲の数値の範囲のビットごとのANDを見つけるプログラム
startとendの2つの値があるとすると、[start、end](両方を含む)の範囲内のすべての数値のビットごとのANDを見つける必要があります。 したがって、入力がstart =8 end =12の場合、出力は8がバイナリで1000、12がバイナリで1100になるため、1000 AND 1001 AND 1010 AND 1011AND1100は1000で8になります。 これを解決するには、次の手順に従います- n:=end-start + 1 x:=0 31から0の範囲のbの場合、1ずつ減らします。 2 ^ b