Допустим, что a = 0011 1100
Итак, с помощью двоичного левого оператора сдвига (< <). Значение левых операндов перемещается влево на количество бит, заданных правым операндом.
A << 2 will give 240 which is 1111 0000
Так что в вашем коде у вас есть цикл для I и контур для J
и эта линия
sum += (i & (1<<j)) != 0 ? n[j] : 0;
Так что для вашей второй итерации = 2 и первой итерации J = 1
Первый левый оператор сдвига сдвинет влево все биты в одном положении, в результате чего 0000 0001 << 1 = 0000 0010 (or 2)
то у вас есть двоичный and
сравнение, которое будет я (0000 0010 in binary) & (0000 0010) = 0000 0010 (or 2)
И это and
результат будет предложено, если он отличается от нуля. Если этот результат верен, то sum
будет увеличен на число в позиции массива n[j]
, иначе это не будет увеличено.
Java имеет сокращенную версию команды if else. Использование этого очень просто, как только вы это понимаете.
Написано:
x ? y : z;
Здесь знак вопроса и двоеточие занять место команды, если и еще. Это означает:
condition ? inCaseOfTrue : elseCase;
thnx для короткого и описательного ответа .. – Subhash