链接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits/
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例 1:
输入: 5
输出: True
解释:
5的二进制数是: 101
示例 2:
输入: 7
输出: False
解释:
7的二进制数是: 111
示例 3:
输入: 11
输出: False
解释:
11的二进制数是: 1011
示例 4:
输入: 10
输出: True
解释:
10的二进制数是: 1010
class Solution {
public:
bool hasAlternatingBits(int n) {
int test;
bool flag = true;
test = n & 1; // 001
n >>= 1;
// cout << test;
while(n)
{
if(test ^ (n & 1))
{
// cout << (test ^ n);
test = n & 1;
// cout << test;
n >>= 1;
}
else
{
flag = false;
break;
}
}
return flag;
}
};
在位运算上容易陷入一个误区,比如n ^ 1并不只是n的第一位和1进行异或运算,把算式写成n ^ 000000001比较好理解,也就是说返回的值不是1或0,而是n的第一位取反以后的值。
有一个比较特殊的是n & 1,因为0 & 任何数都为0,而1 & 任何数都为原数,因此n & 1的结果为n第一位。