语句if(Counter&(1<<j))是什么意思,它是如何工作的? [英] What does the statement if (counter & (1<<j)) mean and how does it work?

查看:25
本文介绍了语句if(Counter&(1<<j))是什么意思,它是如何工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究子序列的算法。

语句的意思是什么:

if (counter & (1<<j))

在下面的程序上下文中:

void printSubsequences(int arr[], int n)
{
    unsigned int opsize = pow(2, n);

    for (int counter = 1; counter < opsize; counter++)
    {
        for (int j = 0; j < n; j++)
        {
            if (counter & (1<<j))
                cout << arr[j] << " ";
        }
        cout << endl;
    }
}

推荐答案

语句:

if (counter & (1<<j))
检查是否设置了counter的第j位。更详细地,1 << j使用1的移位来生成仅设置第[2-0]位的位掩码。然后,&运算符屏蔽counterj位;如果结果不是零(这意味着设置了counterj位),则满足条件。

请考虑以下示例。如果counter为320,则其二进制表示为101000000,这意味着设置了第6位(对应于值64的位);让我们测试一下该位。通过将具有二进制表示0000000011向右移位6位来生成位掩码,从而产生二进制值001000000counter的值,即:

101000000

&组合使用,&是按位AND-运算符,位掩码如下:

  101000000
& 001000000
  ---------
  001000000

001000000再次对应于值64;然而,这在这里并不重要,重要的是它不是零(因为它有一个非零位,即我们要检查的位)。总而言之,条件

if ( 64 )

满意。在C的语义中(它不具有本机布尔数据类型),当使用if检查时,任何非零值都被视为TRUE。

这篇关于语句if(Counter&amp;(1&lt;&lt;j))是什么意思,它是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆