Java 了解按位条件检查以获取数组中所有可能的组合和

Java 了解按位条件检查以获取数组中所有可能的组合和,java,bit-manipulation,bitwise-operators,bit-shift,bitwise-and,Java,Bit Manipulation,Bitwise Operators,Bit Shift,Bitwise And,我得到了一个算法,其目标是给出整数数组中所有组合的所有可能和 private void arraySumPermutation(int value ,int[] arr){ int N = arr.length; for(int i=0;i<1<<N;i++){ int sum = 0; for(int j=0;j<N;j++){ if((i

我得到了一个算法,其目标是给出整数数组中所有组合的所有可能和

private void arraySumPermutation(int value ,int[] arr){
    int N = arr.length;     
    for(int i=0;i<1<<N;i++){
        int sum = 0;                
        for(int j=0;j<N;j++){       

            if((i & 1<<j)>0){
                iCount++;
                sum += arr[j];  
                //S.O.P(sum);
            }
        }

    }
}
我无法理解添加了按位AND的内部if条件。 内部if循环的目标是什么

if((i & 1<<j)>0)

让我们将N元素集的组合表示为N位数字,其中,如果组合中包含第j项,则第j位为1,否则为0。这样,您可以将所有可能的组合表示为[0,2N]范围内的数字


外部循环迭代这些数字1让我们将N元素集的组合表示为N位数字,其中,如果组合中包含第j项,则第j位为1,否则为0。这样,您可以将所有可能的组合表示为[0,2N]范围内的数字

外部循环迭代这些数字1