Werberegeln für binäre Operatoren mit und ohne Vorzeichen
Beachten Sie die folgenden Codeausschnitte:
// Snippet 1 int max = std::numeric_limits::max(); unsigned int one = 1; unsigned int result = max one;
// Snippet 2 unsigned int us = 42; int neg = -43; int result = us neg;
Wie bestimmt der „ “-Operator in diesen Fällen angesichts der unterschiedlichen Vorzeichen der Operanden den richtigen Ergebnistyp?
Der Operator folgt den „üblichen arithmetischen Konvertierungen“ Regel, die die Typkonvertierungsschritte basierend auf den Operandentypen vorschreibt. Wenn gemäß dieser Regel einer der Operanden ist:
Since int und unsigned int sind in der Regel austauschbar, als Ergebnis wird der Operand mit dem breiteren Typ (unsigned int) gewählt type.
Dies erklärt, warum in Snippet 1 das Ergebnis unsigned int (2147483648) und in Snippet 2 das Ergebnis int (-1) ist. Der vorzeichenbehaftete Operand (neg) wird implizit in vorzeichenloses int konvertiert, was im letzteren Fall zu einem undefinierten Wert führt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3