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
,其位右移一位。所以无论你在哪里做这个,你的表达都会派上用场。如果您发布使用此表达式的代码,可能会说更多。