Operatorrangfolge

Gast #7054600
Lesenswert?
• ▲
▼
Lothar M. schrieb:
> Da sind noch mehr solcher überraschenden Tricks versteckt...

Selbst wenn man die richtige Reihenfolge einhält empfiehlt es sich bei 
so etwas immer zu Klammern, diese kosten nichts und stellen das 
gewünschte Verhalten sicher.

Spätestens wenn der Werksstudent loslegt merkt man wie sinnvoll so etwas 
ist...
Gast #7054619
Lesenswert?
• ▲
▼
> Gibt es denn eine sinnvolle Anwendung für die gewählte Priorität?

Sollte sich wohl ähnlich verhalten wie && und || - bei denen erwartet 
man diese Priorität bzg ==, <= und >=.
1
   if (a==b && c==d) ...
2
   if (a==b &  c==d) ...
Gast #7054632
Lesenswert?
• ▲
▼
foobar schrieb:
> Sollte sich wohl ähnlich verhalten wie && und || - bei denen erwartet
> man diese Priorität bzg ==, <= und >=.

Dachte ich auch erst, dann verworfen und gefragt (weil ja nicht 
"boolsch") und nun plausibel im Lichte des Parallelthreads: Damit wäre 
&& ohne Kurzschluss und Klammer möglich: !a() & b()==0 & c()!=0

| geht ja sowieso :-)
Gast #7054673
Lesenswert?
• ▲
▼
PittyJ schrieb:
> Lieber eine Klammer zu viel, als eine zu wenig.

SCNR: lieber zwei Klammern zu viel als zwei zu wenig.
Mit nur einer Klammer bekommst du eine Fehlermeldung ... 😀

Aber mit dem was du meintest pflichte ich dir bei. Wenn man sich nicht 
sicher ist, geht es schneller mit einem extra Klammerpaar als in der 
Referenz nachzuschauen.
#7055007
Lesenswert?
• ▲
▼
Wo ist das Problem?

Wenn Du
1
    std::byte bytevar{};
2
    if(bytevar & 0x1F == 0x1F) {
3
    }
schreibst gibst es eine ganz klare Fehlermeldung, wenn Du
1
    uint8_t bytevar{};
2
    if(bytevar & 0x1F == 0x1F) {
3
    }
gibt es zumindest eine aussagekräftige Warnung.

Und: warum gehst Du eigentlich davon aus, dass `&` eine höhere Präzedenz 
hat als `==` ?
#7055120
Lesenswert?
• ▲
▼
Georg M. schrieb:
> Wilhelm M. schrieb:
>> Und: warum gehst Du eigentlich davon aus, dass `&` eine höhere
>> Präzedenz hat als `==` ?
>
> Aus dem gesunden Menschenverstand.

Den gibts nicht bei C (und nicht nur da). Allerdings ist es wenigstens
komplett dokumentiert. Wer programmiert, ohne das Handbuch zu lesen,
der ist ohnehin schlecht beraten.

Es gibt schließlich auch Programmiersprachen, bei denen nicht mal
Punkt- vor Strichrechnung gilt. Z.B. APL oder SmallTalk.
Gast #7055195
Lesenswert?
• ▲
▼
erklehr behr schrieb:
> Andreas B. schrieb:
>
>> Richtige Männer brauchen keine Handbücher.
>
> Die schreiben nämlich grundsätzlich alle Ausdrücke so in
> Klammern dass keine Missverständnisse aufkommen (können).

Richtige Männer brauchen keine überflüssigen Verzierungen wie Klammern.

LG, Sebastian
#7055246
Lesenswert?
• ▲
▼
Zuviel Klammern können auch schaden:
1
if ((a=b) && (b==c)) {
2
//    ^
3
//    Tippfehler
4
// vs.
5
if (a=b && b==c) {


Ohne die Zusatz-Klammern warnt der Compiler, dass an der Stelle 
eventuell keine Zuweisung gemeint sein könnte.
>>> warning: suggest parentheses around assignment used as truth value

Mit den Extra-Klammern unterdrückt man die Warnung.
#7055309
Lesenswert?
• ▲
▼
HildeK schrieb:
> SCNR: lieber zwei Klammern zu viel als zwei zu wenig.
> Mit nur einer Klammer bekommst du eine Fehlermeldung ... 😀
:)

Der Professor führt eine Rechnung an der Tafel aus und stellt irgendwann 
fest: 'Mist, Vorzeichenfehler'. Er geht die Zeilen rückwärts noch einmal 
durch, finden einen Fehler, korrigiert ihn und sagt: 'So, 
'Vorzeichenfehler beseitigt.'
Anmerkung eines Studenten: 'Die Zahl der Vorzeichenfehler ist nunmehr 
gerade.'

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.