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

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);

【讨论】:

感谢您节省了我的时间。

以上是关于如何有效地检查数字二进制表示中所有下一位是不是不同?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是是有效的十六进制颜色表示?

C语言零基础,怎么用C语言实现CRC16检验码

最有效的方法来检查十进制数字的二进制表示中是否只有一个'1'[重复]

10进制转2进制不够时在哪一位补0

C中二进制表示的基数排序算法

数组中唯一只出现一次的数字