Heim >Backend-Entwicklung >C++ >Wie bestimmen übliche arithmetische Konvertierungen den Ergebnistyp binärer Operatoren mit vorzeichenbehafteten und vorzeichenlosen Operanden?
Werberegeln für signierte und nicht signierte Binäroperatoren
Beachten Sie die folgenden Codeausschnitte:
// Snippet 1 int max = std::numeric_limits<int>::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 den richtigen Ergebnistyp angesichts der unterschiedlichen Vorzeichen von? Operanden?
Der Operator folgt der Regel „übliche arithmetische Konvertierungen“, die die Typkonvertierungsschritte basierend auf den Operandentypen vorschreibt. Wenn gemäß dieser Regel einer der Operanden ist:
Da int und unsigned int sind in der Regel austauschbar, als Ergebnis wird der Operand mit dem breiteren Typ (unsigned int) gewählt Typ.
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 ein vorzeichenloses int umgewandelt, was im letzteren Fall zu einem undefinierten Wert führt.
Das obige ist der detaillierte Inhalt vonWie bestimmen übliche arithmetische Konvertierungen den Ergebnistyp binärer Operatoren mit vorzeichenbehafteten und vorzeichenlosen Operanden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!