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

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

  1. C ++のビットごとのANDとは何ですか?

    ビットごとのAND演算子(&)は、第1オペランドの各ビットを第2オペランドの対応するビットと比較します。両方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0に設定されます。ビット単位の包括的AND演算子の両方のオペランドは、整数型である必要があります。たとえば、 例 #include <iostream>   using namespace std;   int main() {      unsigned short a = 0x5555;      

  2. 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