Приоритетность в C ++ или любых других языках программирования определяет порядок вычисления этих инструкций, некоторые go справа налево, некоторые оцениваются первыми перед другими. Таким образом, в этом случае ваш + = был оценен после оператора & (AND), и это стало причиной вашего неправильного ответа, когда это делается таким образом
count = count + n & 1;
Поскольку в приведенном выше коде + Затем оценивается И затем. Вы можете либо поставить вокруг него скобку, как показано ниже
count = count + (n & 1);
Поскольку оператор скобки имеет более высокий приоритет, он всегда гарантирует, что вы получите правильные результаты. Вы можете узнать больше о приоритете здесь . Вы увидите порядок вычисления для каждого оператора.
Ассоциативность оператора - это свойство, которое определяет, как операторы с одинаковым приоритетом группируются при отсутствии скобок. Это влияет на то, как вычисляется выражение.
И вы всегда можете проверить справочные руководства на C ++ или C, чтобы узнать больше о приоритете. https://en.cppreference.com/w/cpp/language/operator_precedence