Typ der Ganzzahlliterale: Standardmäßig nicht int?
Frage:
Warum Eine for-Schleife, die bis zu 10 Milliarden iteriert, dauert länger als eine, die bis zu 1 iteriert Milliarden?
Antwort:
Die Iterationsvariable in der Schleife ist 32-Bit und läuft über, was eine Endlosschleife verursacht. Das Literal, das 10 Milliarden darstellt, wird vom Compiler automatisch in einen passenden Bereich (in diesem Fall mindestens 64-Bit) hochgestuft, obwohl es kein L-Suffix hat.
C :
Gemäß dem C 11-Standard ([lex.icon] ¶2) ist der Typ eines ganzzahligen Literals ohne Suffix der erste von Tabelle 6, in der sein Wert dargestellt werden kann:
Type |
---|
int |
long int |
long long int |
Daher wird das Literal in diesem Fall als Long-Int oder Long-Long-Int interpretiert (wenn Long-Int 32-Bit ist).
C:
In C99 ([§6.4.4.1]) ist die Regel ähnlich. Der Typ einer Ganzzahlkonstante wird durch den ersten Typ aus einer ähnlichen Liste bestimmt, in der sein Wert dargestellt werden kann.
Implementierungsdefinierte Typen:
Beide C 11 ( [lex.icon] ¶3) und C99 ([§6.4.4.1 ¶5]) ermöglichen ganzzahlige Literale als „erweiterte ganzzahlige Typen“. (implementierungsspezifische Ganzzahltypen), wenn kein anderer gültiger Typ gefunden wird.
Das obige ist der detaillierte Inhalt vonWarum verhalten sich große Ganzzahlliterale in For-Schleifen anders als erwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!