Priorité de l’opérateur (bitwise ‘&’ inférieur à ‘==’)

Dans le langage de programmation C, pourquoi les opérateurs au niveau des bits (& et |) ont-ils une priorité inférieure à l’opérateur d’égalité (==)? ça n’a pas de sens pour moi.

Vous devez demander à Brian Kernighan ou Dennis Ritchie.
Depuis ce forum: http://bytes.com/topic/c/answers/167377-operator-precedence

Les && et || les opérateurs ont été ajoutés plus tard pour leur comportement de “court-circuit”. Dennis Ritchie admet a posteriori que la priorité des opérateurs au niveau des bits aurait dû être modifiée lors de l’ajout des opérateurs logiques. Mais avec plusieurs centaines de kilo-octets de code source C existant à ce moment-là et une base installée de trois ordinateurs, Dennis pensait que ce serait un changement trop important du langage C …

Donc, cela pourrait être une raison? J’imagine qu’il existe plusieurs niveaux de précarité au niveau des bits (contrairement aux comparaisons relationnelles) selon lequel c’est cruel qui existe depuis … pour toujours … et qui n’a jamais été corrigé.

Cela n’a aucun sens pour Dennis Ritchie, rétrospectivement non plus.

http://www.lysator.liu.se/c/dmr-on-or.html

&& et || ont été ajoutés à la langue après | et &, et la priorité a été maintenue pour des raisons de compatibilité.

Je n’ai pas de réponse faisant autorité quant à la raison pour laquelle K & R a choisi la priorité qu’ils ont faite. Un exemple assez logique serait celui-ci:

 if (x == 1 & y == 0) { /* ... */ } 

Comme il s’agit de l’opérateur AND au niveau du bit, il utilise un mode d’évaluation sans court-circuit, comme

 if (x == 1 | y == 0) { /* ... */ } 

utilisez l’opérateur OU sans court-circuit. C’est probablement la raison pour laquelle ils ont choisi de créer le groupe de préséance de cette manière, mais je conviens avec vous que, rétrospectivement, cela ne semble pas être une bonne idée.