语句if(Counter&;(1<;<;j))是什么意思,它是如何工作的? [英] What does the statement if (counter & (1<<j)) mean and how does it work?
本文介绍了语句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]位的位掩码。然后,&
运算符屏蔽counter
的j
位;如果结果不是零(这意味着设置了counter
的j
位),则满足条件。
请考虑以下示例。如果counter
为320,则其二进制表示为101000000
,这意味着设置了第6位(对应于值64的位);让我们测试一下该位。通过将具有二进制表示000000001
的1
向右移位6位来生成位掩码,从而产生二进制值001000000
。counter
的值,即:
101000000
与&
组合使用,&
是按位AND-运算符,位掩码如下:
101000000
& 001000000
---------
001000000
值001000000
再次对应于值64;然而,这在这里并不重要,重要的是它不是零(因为它有一个非零位,即我们要检查的位)。总而言之,条件
if ( 64 )
满意。在C的语义中(它不具有本机布尔数据类型),当使用if
检查时,任何非零值都被视为TRUE。
这篇关于语句if(Counter&;(1<;<;j))是什么意思,它是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文