korrigierte ich kürzlich einen Fehler in einem C-Programm, wo ich hatte:Operator Vorrang in C (! = Und |)
if (foobar != FOO | BAR | BAZ)
Der richtige Code
if (foobar != (FOO | BAR | BAZ))
Nach den C operator precedence ist es klar, dass !=
Vorrang vor |
hat.
Meine Frage ist, warum es so ist und nicht umgekehrt? Aus meiner Erfahrung werde ich oft entweder a == b || a == c
oder d == (a | b | c)
, aber nie a == b | c == d
verwenden.
Was ist die Logik hinter dieser Wahl?
'foobar! = FOO | BAR | BAZ ist äquivalent zu '(foobar!= FOO) | BAR | BAZ, weil der Präzedenzfall von '! =' Höher ist als '|'. Verwenden Sie es, wenn es das ist, was Sie wollen. – MikeCAT
Weil man ein binärer arithmetischer Operator ('|') ist und somit zu der gleichen Ebene wie andere arithmetische Operatoren gehört, und der andere ist ein logischer Operator ('||'). – m0skit0
Weil sich die Sprachdesigner dafür entschieden haben. –