我必须检查一个数字是否满足以下条件:
我写了一段代码,检查这些条件是否存在实际问题(检查数据文件的完整性)。
它可以正常工作,而且时间紧迫,但是我有点老套,喜欢这样的难题,所以我试图想出一种更聪明的方法来检查一位数据流。
字符串被零包围的情况很容易,但不能处理特殊情况。
欢迎提出任何想法,二进制技巧和部分解决方案!
为了使我的要求更加清楚一些示例:以下数字满足我的条件:
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.
最佳答案
这应该做您想要的。
if(i == 0)
return false;
while(i % 2 == 0) {
i = i / 2;
}
return (i & (i + 1)) == 0;
关于language-agnostic - 检测整数内的单个一位流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/462609/