Данная строка выполняет операцию инкремента переменной j на значение, которое получается путем применения побитовой операции "И" между j и его отрицанием (-j).
Побитовая операция "И" (&) выполняет побитовое логическое "И" между двумя числами, результатом является число, в котором каждый бит будет равен 1 только в тех позициях, где оба исходных числа имеют единицы.
Операция j & -j возвращает результат, который содержит только самый младший (правый) единичный бит в двоичном представлении числа j и обнуляет все остальные биты.
Затем операция присваивания += увеличивает переменную j на полученное значение.
Короче говоря, эта строка увеличивает переменную j на наименьшую степень двойки, которая присутствует в двоичном представлении j.
Альтернативный способ записи этой строки может быть использование оператора побитового сдвига влево (<<) вместо оператора побитовой операции "И" (&):
j += (j << 1);
Оба варианта выполняют аналогичную операцию и увеличивают переменную j на наименьшую степень двойки, присутствующую в ее двоичном представлении.
1. Что делает эта строка?
2. Как записать эту строку по другому?