这个按位表达式做什么?

use*_*652 1 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.
Run Code Online (Sandbox Code Playgroud)

码-

main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
    scanf("%d",&n);
    while((n&(n>>1)))
    {
        n++;
    }
    printf("%d\n",n);
}
}
Run Code Online (Sandbox Code Playgroud)

Axe*_*xel 10

它检查连续的n.它执行按位AND运算nn向右移位一位.如果二进制表示n具有至少两个相邻的表示,您将得到如下内容:

n    :       00001100 
n>>1 :       00000110
---------------------
n & (n>>1) : 00000100
Run Code Online (Sandbox Code Playgroud)

将此与原始作业进行比较:

给定一个整数n找到它的下一个更大或相等的数字,其二进制表示不能包含连续的数字.