问题描述:
Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.
示例:
Input: 5 Output: True Explanation: The binary representation of 5 is: 101
Input: 7 Output: False Explanation: The binary representation of 7 is: 111.
Input: 11 Output: False Explanation: The binary representation of 11 is: 1011.
Input: 10 Output: True Explanation: The binary representation of 10 is: 1010.
问题分析:
从高到低找到第一个为1的位,依次从该位到低位遍历,看相邻的位是否不等即可。
过程详见代码:
class Solution {
public:
bool hasAlternatingBits(int n) {
int flag = 0, bit = 1;
for (int i = 0; i < 32; i++)
{
if (!flag)
{
if ((n >> (31 - i)) & 1)
{
flag = 1;
}
}
else
{
if (((n >> (31 - i)) & 1) != bit)
{
bit = (n >> (31 - i)) & 1;
}
else return false;
}
}
return true;
}
};