題目描述 交替位二進(jìn)制數(shù)
給定一個(gè)正整數(shù),檢查他是否為交替位二進(jìn)制數(shù):換句話說(shuō),就是他的二進(jìn)制數(shù)相鄰的兩個(gè)位數(shù)永不相等。
示例
輸入: 5
輸出: True
解釋:
5的二進(jìn)制數(shù)是: 101
解題思路
轉(zhuǎn)自
先將n右移兩位,再和原來(lái)的n亦或,得到的新n其實(shí)就是除了最高位,其余都是0的數(shù),然后再和自身減1的數(shù)相‘與’,如果是0就返回true,反之false。比如n是10101,那么n/4是101,二者相‘亦或’,得到10000,此時(shí)再減1,為1111,二者相‘與’得0
代碼
bool hasAlternatingBits(int n) {
return ((n ^= n / 4) & (n - 1)) == 0;
}