---
# System prepended metadata

title: LeetCode 693. Binary Number with Alternating Bits
tags: [Leetcode]

---

---
title: 'LeetCode 693. Binary Number with Alternating Bits'
disqus: hackmd
---

# LeetCode 693. Binary Number with Alternating Bits



## Description

Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.

## Example

Input: n = 5
Output: true
Explanation: The binary representation of 5 is: 101

Input: n = 7
Output: false
Explanation: The binary representation of 7 is: 111.

## Constraints

1 <= n <= 2^31^ - 1

## Answer

此題可藉由0xaaaaaaaa跟0x55555555都是交錯的二進位來處理，所以交錯數對n做&仍為原數。而n|n>>2是用來防範2的次方數，2的次方取n|n>>2就會變交錯數，如此對交錯數做&就不會是原數了。


```Cin=
//2022_03_13
bool hasAlternatingBits(int n){
    return (( (n|n>>2) & 0x55555555 ) == n) || (( (n|n>>2) & 0xaaaaaaaa ) == n);
}
```



## Link
https://leetcode.com/problems/binary-number-with-alternating-bits/
###### tags: `Leetcode` 
