(x & (x >> 1) == 0) 检查什么?
What does (x & (x >> 1) == 0) check for?
我在一个大型代码库中看到了这个语句,我不知道这个使用位操作的检查是干什么用的。这是位操作中的一些标准技巧吗?如果有,它在寻找什么?
我知道在二进制中,x >> 1
将 x
的所有位都移到正确的 1 位,因此使用 x
将保证 [= 的最大设置位11=] 变为零。但是我就是不明白这个检查的目的。
(x & (x >> 1)) == 0
(为安全添加额外的括号)检查 x
中是否有相邻的设置位,如果没有则计算为 true
。
例如:
10101010 -> true
00010000 -> true
00000011 -> false
10100110 -> false
我在一个大型代码库中看到了这个语句,我不知道这个使用位操作的检查是干什么用的。这是位操作中的一些标准技巧吗?如果有,它在寻找什么?
我知道在二进制中,x >> 1
将 x
的所有位都移到正确的 1 位,因此使用 x
将保证 [= 的最大设置位11=] 变为零。但是我就是不明白这个检查的目的。
(x & (x >> 1)) == 0
(为安全添加额外的括号)检查 x
中是否有相邻的设置位,如果没有则计算为 true
。
例如:
10101010 -> true
00010000 -> true
00000011 -> false
10100110 -> false