Heim > Backend-Entwicklung > C++ > Wie bestimmen C-Heraufstufungsregeln den Rückgabetyp binärer arithmetischer Operatoren mit gemischten Ganzzahltypen mit und ohne Vorzeichen?

Wie bestimmen C-Heraufstufungsregeln den Rückgabetyp binärer arithmetischer Operatoren mit gemischten Ganzzahltypen mit und ohne Vorzeichen?

Patricia Arquette
Freigeben: 2024-11-28 08:30:11
Original
860 Leute haben es durchsucht

How Do C   Promotion Rules Determine the Return Type of Binary Arithmetic Operators with Mixed Signed and Unsigned Integer Types?

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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):

  1. Wenn einer der Operanden ist Long Double, konvertieren Sie beide in Long Double.
  2. Wenn einer der Operanden Double ist, konvertieren Sie beide in Double.
  3. Wenn einer der Operanden Float ist, konvertieren Sie beide in Float.
  4. Anwenden Integrale Heraufstufungen für beide Operanden.
  5. Wenn einer der Operanden ein vorzeichenloser Long-Wert ist, konvertieren Sie beide in einen vorzeichenlosen Long-Wert.
  6. Wenn Einer der Operanden ist eine lange Ganzzahl und der andere eine vorzeichenlose Ganzzahl. Konvertieren Sie die vorzeichenlose Ganzzahl nach Möglichkeit in eine lange Ganzzahl. Andernfalls konvertieren Sie beide in eine vorzeichenlose Ganzzahl.
  7. Wenn einer der Operanden eine lange Zahl ist, konvertieren Sie beide in eine lange Ganzzahl.
  8. Wenn einer der Operanden ohne Vorzeichen ist, konvertieren Sie beide in ohne Vorzeichen.
  9. Wenn beide Operanden int sind, keine weiteren Konvertierungen auftreten.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage