【问题标题】: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 是的。零也是一样。

标签: binary bit-manipulation bitwise-operators


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您节省了我的时间。
猜你喜欢
  • 2020-10-16
  • 2014-11-14
  • 1970-01-01
  • 2011-09-01
  • 2011-12-23
  • 2018-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多