让我们考虑我们有一个整数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