原题链接
    题目描述:

    1. 给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
    2. 示例 1:
    3. 输入: 5
    4. 输出: True
    5. 解释:
    6. 5的二进制数是: 101
    7. 示例 2:
    8. 输入: 7
    9. 输出: False
    10. 解释:
    11. 7的二进制数是: 111
    12. 示例 3:
    13. 输入: 11
    14. 输出: False
    15. 解释:
    16. 11的二进制数是: 1011
    17. 示例 4:
    18. 输入: 10
    19. 输出: True
    20. 解释:
    21. 10的二进制数是: 1010

    解:
    我的解:

    public static boolean hasAlternatingBits(int n) {
        int flag = n & 1;
        n >>= 1;
        while (n > 0) {
            if ((n & 1) == flag) {
                return false;
            }
            flag = n & 1;
            n >>= 1;
        }
        return true;
    }
    

    大佬的解:
    对于 1010 这种位级表示的数,把它向右移动 1 位得到 101,这两个数每个位都不同,因此异或得到的结果为 1111。

    public boolean hasAlternatingBits(int n) {
        int a = (n ^ (n >> 1));
        return (a & (a + 1)) == 0;
    }