Ehm .. Ich mag diese Modifikatoren, wie long / short , die die Speichermenge, die beim Erstellen von Variablen zugewiesen wird, erweitern / reduzieren, aber ...
%Vor%Aus unbekannten Gründen wird die Größe von int und long int als gleich ausgegeben. Ich benutze vc ++ 2010 Express Edition. Sorry, schwer zu finden Antwort in Google, es zeigt immer lang und int als separate Typen.
Der Grund dafür, dass MS selbst auf einem 64-Bit-System long
32 Bit verwendet, ist, dass die vorhandene Windows-API aus historischen Gründen eine Mischung aus int
und long
für ähnliche Dinge und die Erwartung verwendet ist, dass dies ein 32-Bit-Wert ist (einige davon gehen auf Zeiten zurück, als Windows ein 16-Bit-System war). Um die Konvertierung von altem Code in die neue 64-Bit-Architektur zu ermöglichen, haben sie long
mit 32 Bit beibehalten, sodass Anwendungen, die int
und long
an verschiedenen Stellen mischen, immer noch compiliert werden.
Es gibt nichts im C ++ - Standard, der vorschreibt, dass ein long
größer sein sollte als int
(auf den meisten 32-Bit-Systemen ist dies sicherlich nicht der Fall). Der Standard besagt, dass die Größe von short
& lt; = int
& lt; = long
- und dass short
mindestens 16 Bits ist, wenn der Speicher nicht notwendigerweise als "mindestens 16" ausgedrückt wird Bits ", ich denke, es erwähnt die Bandbreite der Werte].
Alles was der Standard erfordert ist:
%Vor%und
%Vor%(und die entsprechenden vorzeichenlosen Typen haben die gleiche Größe wie die signierten Typen).
Darüber hinaus gibt es für jeden Typ indirekt Mindestgrößen
spezifiziert durch Grenzen für die Werte von INT_MAX
, etc .: a char
muss mindestens 8 Bits, ein short
und ein int
16, ein long
32 sein
und ein long long
64.
Auf 16-Bit-Plattformen ist es üblich, dass sowohl short
als auch int
verwendet werden
16 Bits sein; auf 32-Bit-Plattformen (und die 36- und 48-Bit-Plattformen
die noch existieren), int
und long
sind fast immer gleich
Größe. Auf modernen 64-Bit-Plattformen (mit Byteadressierung) ist der
Rationale Lösung wäre, alle vier Typen unterschiedlich zu machen
Größen (obwohl man argumentieren könnte, dass nach dem Standard,
int
sollte 64 Bit sein, was bedeutet, dass int
, long
und long
long
alle dieselbe Größe hatten).
C- und C ++ - Implementierungen, ein long ist größer oder gleich einem int. Die beliebtesten Desktop-Plattformen von heute, wie Windows und Linux, laufen hauptsächlich auf 32-Bit-Prozessoren, und die meisten Compiler für diese Plattformen verwenden einen 32-Bit-Int, der die gleiche Größe und Darstellung wie ein Lang hat.
Im 64-Bit-Compiler sind int und log int 4 Bytes.
Wenn Sie in Windows sind, gehen Sie den folgenden Link durch: Ссылка
Sie können einige Informationen in einer anderen Diskussion finden: Was ist die Bitgröße von lang auf 64- Bit Windows?
Hier ist die Bestellung
%Vor% Der Standard erfordert, dass sizeof(char) == 1
wahr ist.
Der Standard erfordert auch, dass: int
mindestens 16 Bits ist. long int
ist mindestens 32 Bit und long long int
ist mindestens 64 Bit.
Wenn 32-Bit-Prozessoren mainstream sind, setzen Compiler typischerweise int
auf 4 Bytes.
Die Erweiterung ist auf 64-Bit-Systemen (für MSVC sowieso) aus Kompatibilitätsgründen nicht wieder aufgetreten.
Der Punkt ist, dass Sie die Bedeutung von int und long falsch verstehen (das ist kein Adjektiv).
Was der Standard definiert, ist, dass die Anzahl der Bits in jedem Typ erfordert, dass diese Beziehung an Ort und Stelle bleibt:
%Vor% int
kann für sich selbst so lange wie ein short
bis zu einem long
sein, je nachdem wie die Implementierung konzipiert ist.
Compiler-Designer tendieren dazu, die Leistung von int
arithmetic zu maximieren, indem sie die natürliche Größe für den zugrunde liegenden Prozessor oder das Betriebssystem festlegen und die anderen Typen entsprechend einrichten.
Aber die Verwendung von long int
, da int
weggelassen werden kann, ist per Definition identisch mit long
.