У меня нет авторитетного ответа о том, почему K & R выбрал приоритет, который они сделали. Один пример, который имеет достаточное количество смысла, был бы следующим:
if (x == 1 & y == 0) {
/* ... */
}
Поскольку это побитовый оператор AND, он использует режим оценки без короткого замыкания, как если бы
if (x == 1 | y == 0) {
/* ... */
}
использовать оператор ИЛИ без короткого замыкания. Возможно, именно поэтому они выбрали такую группу приоритетов, но я согласен с вами, что в ретроспективе это не кажется хорошей идеей.