如何有效地检查数字二进制表示是否所有下一位都不同?

How to check efficiently if in number binary representation all next bit is different?

我需要编写函数来检查数字二进制表示是否不包含重复项。例如,如果 N 等于 42,函数必须 return true,因为 bin(42) 等于 101010,但如果 N 等于 45 函数必须 return false,因为 45 的二进制表示等于 101101 并且其中包含重复项 11.

这只允许在 0 和 1 之间交替的位,加上可能的前导零。

检查这一点的一种方法是查看 (N << 2) | N。如果 N 是正确的形式,那么这等于 N << 2,除了位 0 或 1。我们可以如下补偿:

unsigned N2 = N << 2;
return (N | N2) <= (N2 | 2);