检查数字是否有其他模式的位-C ++中的Set-2 O(1)方法

让我们考虑我们有一个整数n。问题是检查此整数是否具有等效的二进制二进制模式。备用模式表示101010…。

方法类似于:计算num = n XOR(n >> 1),现在,如果num的所有位均为1,则num具有交替的模式。

示例

#include <iostream>
#include <algorithm>
using namespace std;
bool isAllBitSet(int n){
   if (((n + 1) & n) == 0)
      return true;
   return false;
}
bool hasAlternatePattern(unsigned int n) {
   unsigned int num = n ^ (n >> 1);
   return isAllBitSet(num);
}
int main() {
   unsigned int number = 42;
   if(hasAlternatePattern(number))
      cout << "Has alternating pattern";
   else
      cout << "Has no alternating pattern";
}

输出结果

Has alternating pattern