繁体   English   中英

该按位表达式有什么作用?

[英]What does this bitwise expression do?

n & (n>>1)

在哪里可以使用上面的表达式? 我在做这个问题,我看到了这个问题的解决方案在使用的表达。

问题-

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);
}
}

它检查n是否连续。 它对nn右移一位按位与运算。 如果n的二进制表示形式至少具有两个相邻的n ,则您将得到以下内容:

n    :       00001100 
n>>1 :       00000110
---------------------
n & (n>>1) : 00000100

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

给您一个整数n,找到整数的下一个更大或相等的数字,其二进制表示形式不得包含连续的整数。

首先将变量n的位右移

>> -右移

然后使用移位的位执行和操作。

&-按位与运算。

在这里,完整的操作正在发生

考虑int n=6

因此它的二进制等效项将是110 ..,并且您必须找出下一个大于或等于其二进制等效项不应包含两个连续整数的数字。

所以您将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);
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM