Heim >Backend-Entwicklung >C++ >Wie behandeln C-Heraufstufungsregeln binäre Operationen mit vorzeichenbehafteten und vorzeichenlosen Ganzzahlen?

Wie behandeln C-Heraufstufungsregeln binäre Operationen mit vorzeichenbehafteten und vorzeichenlosen Ganzzahlen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-29 14:24:10531Durchsuche

How Do C   Promotion Rules Handle Binary Operations with Signed and Unsigned Integers?

Hochstufungsregeln für Operatoren, die vorzeichenbehaftete und vorzeichenlose Ganzzahlen verarbeiten

Beim Umgang mit binären Operatoren, die unterschiedliche Vorzeichen zwischen ihren Operanden beinhalten, gelten die in der C-Standard kommt ins Spiel. Diese Regeln bestimmen die resultierende Art der Operation und wie die Operanden umgewandelt werden.

Im Einzelnen gelten hier die „üblichen arithmetischen Umrechnungen“ (§5/9). Diese Konvertierungen werden in absteigender Reihenfolge geordnet:

  1. Long Double (falls vorhanden)
  2. Double
  3. Float
  4. Integrale Promotionen (Convert Short/Int /long long to int/long/long long)
  5. Unsigned long (if vorhanden)
  6. Long, wenn long int alle unsigned int-Werte darstellen kann, andernfalls unsigned long int
  7. Long (falls vorhanden)
  8. Unsigned (falls vorhanden)

Anwenden dieser Regeln auf die beiden Szenarien dargestellt:

Szenario 1:

int max = std::numeric_limits<int>::max();
unsigned int one = 1;
unsigned int result = max + one;
  • max ist vorzeichenbehafteter int, einer ist vorzeichenloser int
  • Integrale Promotionen finden statt, was zu max as int
  • Da unsigned int einen höheren Rang hat, ist der Ergebnistyp unsigned int
  • Ergebnis: vorzeichenloser Überlauf zu 2147483648

Szenario 2:

unsigned int us = 42;
int neg = -43;
int result = us + neg;
  • us ist unsigned int, neg ist unterzeichnet int
  • Integrierte Werbeaktionen auftreten, was zu us als unsigned int und neg as int führt
  • Da unsigned int einen höheren Rang hat, ist der Ergebnistyp unsigned int
  • Der Wert von us neg (-1) ist jedoch nicht der Fall darstellbar in int
  • Ergebnis: Durch die Implementierung definiertes Verhalten, das wahrscheinlich -1 zurückgibt oder plattformabhängig ist

Das obige ist der detaillierte Inhalt vonWie behandeln C-Heraufstufungsregeln binäre Operationen mit vorzeichenbehafteten und vorzeichenlosen Ganzzahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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