什么是1&lt; <j表示?=“”

时间:2016-11-22 08:22:16

标签: loops for-loop bitwise-operators bit-shift

=“”

这些天,在许多算法挑战的解决方案部分,我看到这个特定的短语1<<j,有时作为for循环的退出条件, 这些i<(1<<n)1<<j的重要性是什么?

例如:

for(i=0;i<**(1<<n)**;i++)
       {
        sum=0;
          for(j=0;j<n;j++)
          {
            if(i&**(1<<j)**)
            {
             sum+=a[j];
            }
          }
          if(sum==m)
          {
             flag=1;
             break;
          }
       }

编辑:通过“什么是1<<j”,我的意思是循环的程度如何?

1 个答案:

答案 0 :(得分:1)

在二进制系统中,2的幂表示1后跟零。例如:

2 5 = 32 (十进制)= 100000 (二进制)

如果您想计算2的幂,请将1个位置向左移动几个。左移将填补&#34; new&#34;零的地方:

1&lt;&lt; 5 (C / Java表示法)= 100000 (二进制)= 32 (十进制)= 2 5

因此,您可以使用左移作为计算2的幂的简单方法。

你无法计算例如3很容易。例如,以下C代码将计算3的幂:

(int)(pow(3.0, 5.0) + 0.5)

如果要将其用作循环终止条件,则需要转换为int(或其他合适的类型)。这种转换看起来很丑陋,并且可能会出错(如果省略+ 0.5)。

因此,如果你需要2的幂,而不是任何其他数字,那么使用左移更容易。