Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Kiểm tra số có 2 bit 1 liên tiếp C++


Kiểm tra biểu diễn nhị phân của số N có chứa 2 bit 1 liên tiếp hay không.

Ví dụ: 12 = 1100₂ (có), 10 = 1010₂ (không).

Chiêu bitwise

N & (N >> 1) != 0 ⇔ có ít nhất 1 cặp bit 1 liên tiếp.

Giải thích: Dịch phải 1 bit, sau đó AND. Nếu có cặp 11 thì tại vị trí đó cả 2 đều là 1 → kết quả ≠ 0.

Chương trình C++

#include <iostream>
#include <bitset>
using namespace std;

bool hasConsecutiveOnes(int n) {
    return (n & (n >> 1)) != 0;
}

int main() {
    vector test = {12, 10, 67, 5, 3, 6, 7};
    for (int n : test) {
        cout << n << " (" << bitset<8>(n) << ") -> "
             << (hasConsecutiveOnes(n) ? "Co bit 1 lien tiep" : "Khong co") << "\n";
    }
    return 0;
}

Kết quả

12 (00001100) -> Co bit 1 lien tiep
10 (00001010) -> Khong co
67 (01000011) -> Co bit 1 lien tiep
5  (00000101) -> Khong co
3  (00000011) -> Co bit 1 lien tiep
6  (00000110) -> Co bit 1 lien tiep
7  (00000111) -> Co bit 1 lien tiep