693. 交替位二进制数

给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。

示例 1:

输入: 5

输出: True

解释:
5的二进制数是: 101

Solution:

1
2
3
4
5
6
7
8
9
class Solution {
public:
bool hasAlternatingBits(int n) {
//如果是奇偶交替,则n ^ (n >> 1) 会使有效位全为1,
int temp = n ^ (n >> 1);
//有效位全为1 再加1, 得到有效位前面为1,后面全为0,再与该数与,则全部清零。
return (temp & (temp+1)) == 0;
}
};