我必须检查一个数字是否满足以下条件:
- 在二进制中,所有一位必须是连续的。
- 该数字必须至少设置一位。
- 连续的一位可能从 MSB 开始或在 LSB 结束,因此如果该数字由单个一位流和一个零位流组成,则完全有效,反之亦然。
我编写了一个代码来检查这些条件是否存在实际问题(检查数据文件完整性)。
它可以正常工作,而且时间紧迫,但我是一个老顽固的怪胎,喜欢这样的谜题,所以我试图想出一种更聪明的方法来检查单比特流。
字符串被零包围的情况很容易,但不能处理特殊情况。
欢迎任何想法、二进制黑客和部分解决方案!
为了让我的要求更清楚一些例子:以下数字满足我的标准:
0x80000000
0x00000001
0xff000000
0x000000ff
0xffffffff
0x000ff000
以下数字没有(因为它们有多个连续的一串):
0xf00000f <- one-bit streams should not wrap-around at 2^n
0x0001700 <- a trivial example.
0x0000000 <- no one bit at all.