题目描述 交替位二进制数
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例
输入: 5
输出: True
解释:
5的二进制数是: 101
解题思路
转自
先将n右移两位,再和原来的n亦或,得到的新n其实就是除了最高位,其余都是0的数,然后再和自身减1的数相‘与’,如果是0就返回true,反之false。比如n是10101,那么n/4是101,二者相‘亦或’,得到10000,此时再减1,为1111,二者相‘与’得0
代码
bool hasAlternatingBits(int n) {
return ((n ^= n / 4) & (n - 1)) == 0;
}