if语句中的按位运算符

时间:2014-12-09 22:43:01

标签: if-statement operators bit-manipulation conditional-statements bitwise-operators

在浏览代码时,我看到了这一点。

for(i=0; i<n; i++)
{
    for(j=0; j<n; j++)
    {
    if(i & (1<<j))
       {
         //code
       }
    }
}

任何人都可以知道这个循环是如何工作的? 我知道正确的部分将是pow(2,j),但我不明白将如何&amp;在这里工作。

1 个答案:

答案 0 :(得分:1)

它循环遍历从0n的所有值,并且对于每个值: 它循环遍历值中的每个位。如果设置了值:
它执行//code

让我们检查复杂的部分:

if(i & (1<<j))

1<<j是设置j位(从零开始)的常用方法。如果是j==0,那么它是0b00001,如果是j==3那么它是0b01000。然后i & <bit>评估为<bit&gt;如果该位在i中设置,则计算结果为0。因此,这会检查j中是否设置了i位。

触发代码的值对包括:

i binary     js
0    000   
1    001     0
2    010        1
3    011     0, 1
4    100           2
5    101     0,    2
6    110        1, 2
etc...
31 11111     0, 1, 2, 3, 4,

注意二进制文件中的1如何镜像代码触发的j值。

请注意,如果n>=32,它会尝试将值移动太远,以及未定义的行为。确保没有发生。