如何有效地检查数字二进制表示中所有下一位是不是不同?
Posted
技术标签:
【中文标题】如何有效地检查数字二进制表示中所有下一位是不是不同?【英文标题】:How to check efficiently if in number binary representation all next bit is different?如何有效地检查数字二进制表示中所有下一位是否不同? 【发布时间】:2021-11-09 21:22:14 【问题描述】:我需要编写函数来检查数字二进制表示是否不包含重复。例如,如果 N 等于 42,函数必须返回 true,因为 bin(42) 等于 101010,但如果 N 等于 45,则函数必须返回 false,因为 45 的二进制表示 等于 101101 并且包含重复的 11。
【问题讨论】:
100101呢,相邻的0也是禁止的吗? @FalkHüffner 是的。零也是一样。 【参考方案1】:这仅允许在 0 和 1 之间交替的位,加上可能的前导零。
检查这一点的一种方法是查看(N << 2) | N
。如果N
的格式正确,那么这等于N << 2
,除了位0 或1。我们可以通过以下方式对其进行补偿:
unsigned N2 = N << 2;
return (N | N2) <= (N2 | 2);
【讨论】:
感谢您节省了我的时间。以上是关于如何有效地检查数字二进制表示中所有下一位是不是不同?的主要内容,如果未能解决你的问题,请参考以下文章