„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie bestimmen übliche arithmetische Konvertierungen den Ergebnistyp binärer „+“-Operatoren mit vorzeichenbehafteten und vorzeichenlosen Operanden?

Wie bestimmen übliche arithmetische Konvertierungen den Ergebnistyp binärer „+“-Operatoren mit vorzeichenbehafteten und vorzeichenlosen Operanden?

Veröffentlicht am 22.12.2024
Durchsuche:601

How Do Usual Arithmetic Conversions Determine the Result Type of Binary \

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:

  • long double, werden beide Operanden in long double konvertiert.
  • double, beide Operanden werden in double konvertiert.
  • float, beide Operanden werden in float konvertiert.
  • unsigned long, der andere Operand wird in unsigned konvertiert long.
  • long int und der andere Operand unsigned int, beide Operanden werden in unsigned long int konvertiert, wenn der Wert des unsigned int in einem long int dargestellt werden kann; andernfalls werden beide in long konvertiert.
  • long, der andere Operand wird in long.
  • unsigned konvertiert, der andere Operand wird in unsigned konvertiert.

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.

Neuestes Tutorial Mehr>

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