ให้เราพิจารณาว่าเรามีจำนวนเต็ม 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