n & (n>>1)
我在哪里可以使用上面的表达式?我正在处理this问题,我看到this解决了使用表达式的问题。
问题 -
You are given an integer n find its next greater or equal number whose
binary representation must not contain consecutive ones.
代码 -
main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
while((n&(n>>1)))
{
n++;
}
printf("%d\n",n);
}
}
答案 0 :(得分:10)
它会检查n
中的连续值。它对n
进行按位AND运算,n
向右移一位。如果n
的二进制表示具有至少两个相邻的表示,您将得到如下内容:
n : 00001100
n>>1 : 00000110
---------------------
n & (n>>1) : 00000100
将此与原始作业相比较:
给你一个整数n找到它的下一个更大或相等的数字 二进制表示不得包含连续的表示。
答案 1 :(得分:1)
首先将变量n
中的位移位到右侧
>>
- 按位向右移动
然后使用移位位执行和操作..
&安培; - 按位和操作。
这里完成了这样的操作
考虑int n=6
所以它的二进制等价值是110 ..你必须找出下一个大于或等于的数字,其二进制等价物不应该包含两个连续的一个。
所以你不会是8,因为它的二进制等价值是1000
所以,如果你执行
(n>> 1)结果将为011
如果您执行并操作
011
110
结果将是
010
现在追踪你的答案代码
main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
while((n&(n>>1)))
{
n++;
}
printf("%d\n",n);
}
}