Wie Promotion-Regeln die Arithmetik binärer Operatoren mit gemischten Vorzeichentypen regeln
Betrachten Sie den folgenden Code:
int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
Der Der Operator berechnet das Ergebnis als 2147483648 und schlägt unsigned int als Rückgabetyp vor. Umgekehrt im folgenden Code:
unsigned int us = 42; int neg = -43; int result = us + neg;
Ergebnis ist -1, was auf einen int-Rückgabetyp hinweist.
Auflösung von Hochstufungsregeln
Das C Der Standard definiert spezifische Heraufstufungsregeln für arithmetische binäre Operatoren (C §5/9):
Auswirkungen auf die Beispiele
In beiden Beispielen führen die Heraufstufungsregeln zu einem vorzeichenlosen Typ für die Operatorberechnung.
Beispiel 1: Sowohl max als auch one werden zu unsigned int heraufgestuft, was zu einem Rückgabetyp von unsigned führt int.
Beispiel 2: Die Promotion-Regeln schreiben keinen klaren Gewinner zwischen int und unsigned int vor. Allerdings wird der vorzeichenlose Typ ausgewählt, was zu einem vorzeichenlosen Überlauf für das Ergebnis führt. Da das Ergebnis letztendlich einem int zugewiesen wird, ist der resultierende Wert gemäß C §4.7/3 undefiniert.
Das obige ist der detaillierte Inhalt vonWie bestimmen C-Heraufstufungsregeln den Rückgabetyp binärer arithmetischer Operatoren mit gemischten Ganzzahltypen mit und ohne Vorzeichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!