Приоритет оператора определяет группировку между операторами и их операндами. В вашем примере группировка выглядит следующим образом
c = ((2 * (-(++i))) << 1);
Вот как «здесь работает приоритет оператора», и это единственное, что он делает.
Результат этого выражения -6
сдвинут на один бит влево. Это происходит на вашей платформе -12
.
Согласно вашему комментарию в другом ответе, вы ошибочно полагаете, что приоритет оператора как-то контролирует то, что выполняется «первым», а что выполняется «следующим». Это совершенно неверно. Приоритет оператора не имеет абсолютно никакого отношения к порядку выполнения. Единственное, что делает приоритет оператора, опять же, это определение группировки между операторами и их операндами. Не больше, не меньше.
Порядок выполнения - это совершенно другая вещь, полностью независимая от приоритета оператора. Фактически, язык C ++ не определяет никакого «порядка выполнения» для выражений, не содержащих точек последовательности внутри (включая приведенный выше).