Heim > Backend-Entwicklung > C++ > Wie geht C mit der Heraufstufung binärer Operatoren mit unterschiedlicher Vorzeichen um?

Wie geht C mit der Heraufstufung binärer Operatoren mit unterschiedlicher Vorzeichen um?

Mary-Kate Olsen
Freigeben: 2024-12-02 08:00:13
Original
926 Leute haben es durchsucht

How Does C   Handle Binary Operator Promotion with Differing Signedness?

Hochstufung binärer Operatoren bei unterschiedlichen Vorzeichen

Wenn binäre Operatoren Operanden mit unterschiedlichen Vorzeichen bearbeiten, stellt der C-Standard spezifische Richtlinien zur Bestimmung der Hochstufung bereit Regeln und der resultierende Typ.

Abschnitt 5/9 des Standards beschreibt die „üblichen arithmetischen Konvertierungen“, die gelten an solche Betreiber. Diese Konvertierungen folgen einer hierarchischen Reihenfolge:

  1. Wenn einer der Operanden ein Long Double ist, werden beide Operanden in ein Long Double konvertiert.
  2. Wenn einer der Operanden ein Double ist, werden beide Operanden in ein Double konvertiert.
  3. Wenn einer der Operanden Float ist, werden beide Operanden in Float konvertiert.
  4. Integrale Heraufstufungen werden durchgeführt für beide Operanden.
  5. Wenn einer der Operanden unsigned long ist, werden beide Operanden in unsigned long konvertiert.
  6. Wenn ein Operand ein long int und der andere ein unsigned int ist, bestimmen Sie, ob long int darstellen kann alle Werte von unsigned int. Wenn ja, konvertieren Sie unsigned int in long int; andernfalls konvertieren Sie beide Operanden in vorzeichenlose lange Ganzzahlen.
  7. Wenn einer der Operanden lang ist, werden beide Operanden in lange konvertiert.
  8. Wenn einer der Operanden ohne Vorzeichen ist, werden beide Operanden in vorzeichenlose umgewandelt.
  9. Ansonsten bleiben beide Operanden vom Typ int.

Wird angewendet diese Regeln zu den bereitgestellten Codebeispielen:

Beispiel 1:

unsigned int one = 1;
int max = std::numeric_limits<int>::max();
unsigned int result = max + one;
Nach dem Login kopieren

Da unsigned int in Schritt 5 der Regeln Vorrang vor int hat, werden alle Operanden konvertiert zu unsigned int. Daher ist das Ergebnis vom Typ „unsigned int“.

Beispiel 2:

unsigned int us = 42;
int neg = -43;
int result = us + neg;
Nach dem Login kopieren

In diesem Fall schreiben die Regeln vor, dass beide Operanden in „unsigned int“ konvertiert werden sollen. Der resultierende Wert (-1) kann jedoch nicht in unsigned int dargestellt werden. Daher ist der Ergebnistyp des Ausdrucks gemäß §4.7/3.

durch die Implementierung definiert

Das obige ist der detaillierte Inhalt vonWie geht C mit der Heraufstufung binärer Operatoren mit unterschiedlicher Vorzeichen um?. 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