C++ 这个按位表达式做什么?
C++ 这个按位表达式做什么?,c++,bitwise-operators,C++,Bitwise Operators,n&(n>>1) 我在哪里可以使用上述表达式?我在做这个问题,我看到了这个问题的解决方案,其中使用了这个表达式 问题- You are given an integer n find its next greater or equal number whose binary representation must not contain consecutive ones. 代码- 它检查n中是否有连续的。它对n执行按位AND运算,并将n向右移动一位。如果n的二进制表示形式至少有两个相邻
n&(n>>1)
我在哪里可以使用上述表达式?我在做这个问题,我看到了这个问题的解决方案,其中使用了这个表达式
问题-
You are given an integer n find its next greater or equal number whose
binary representation must not contain consecutive ones.
代码-
它检查
n
中是否有连续的。它对n
执行按位AND运算,并将n
向右移动一位。如果n
的二进制表示形式至少有两个相邻的表示形式,您将得到如下结果:
n : 00001100
n>>1 : 00000110
---------------------
n & (n>>1) : 00000100
将其与原始分配进行比较:
给您一个整数n,查找其下一个大于或等于
二进制表示不能包含连续的表示
它检查
n
中是否有连续的。它对n
执行按位AND运算,并将n
向右移动一位。如果n
的二进制表示形式至少有两个相邻的表示形式,您将得到如下结果:
n : 00001100
n>>1 : 00000110
---------------------
n & (n>>1) : 00000100
将其与原始分配进行比较:
给您一个整数n,查找其下一个大于或等于
二进制表示不能包含连续的表示
首先将变量
n
中的位右移
>
-按位右移
然后使用移位的位执行and操作
&-按位and运算
在这里,整个操作是这样进行的
考虑int n=6
所以它的二进制等价物是110。。你们必须找出下一个大于或等于的数,它的二进制等价物不应该包含两个连续的1
所以你知道no是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);
}
}
首先将变量
n
中的位右移
>
-按位右移
然后使用移位的位执行and操作
&-按位and运算
在这里,整个操作是这样进行的
考虑int n=6
所以它的二进制等价物是110。。你们必须找出下一个大于或等于的数,它的二进制等价物不应该包含两个连续的1
所以你知道no是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);
}
}
表达式逻辑上同时表示
和和n
和n
,其位右移一位。所以无论你在哪里做这个,你的表达都会派上用场。如果您发布使用此表达式的代码,可能会说得更多。该表达式逻辑上同时显示和n
和n
,其位右移一位。所以无论你在哪里做这个,你的表达都会派上用场。如果您发布使用此表达式的代码,可能会说更多。