In Anbetracht dessen, dass die folgenden Anweisungen 4
, was ist der Unterschied zwischen den int
und long
Typen in C++?
sizeof(int)
sizeof(long)
Von diese Referenz:
Ein int sollte ursprünglich die "natürliche" Wortgröße des Prozessors sein. Viele moderne Prozessoren können problemlos mit unterschiedlichen Wortgrößen umgehen.
Auch dieses Bit:
In vielen (aber nicht allen) C- und C++ - Implementierungen ist ein Long größer als ein Int. Die gängigsten Desktop-Plattformen von heute, wie Windows und Linux, werden hauptsächlich auf 32-Bit-Prozessoren ausgeführt. Die meisten Compiler für diese Plattformen verwenden ein 32-Bit-Int, das dieselbe Größe und Darstellung wie ein Long hat.
Die Garantien, die Ihnen der Standard gibt, lauten wie folgt:
1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)
Es ist also vollkommen gültig, dass sizeof (int)
und sizeof (long)
gleich sind, und viele Plattformen entscheiden sich für diesen Ansatz. Sie werden einige Plattformen finden, auf denen int
32 Bit, long
64 Bit und long long
128 Bit sind, dies scheint jedoch für sizeof (long)
sehr häufig zu sein. 4 sein.
(Beachten Sie, dass long long
In C ab C99 erkannt wird, aber normalerweise als Erweiterung in C++ vor C++ 11 implementiert wurde.)
Sie arbeiten auf einem 32-Bit-Computer oder einem 64-Bit-Windows-Computer. Auf meinem 64-Bit-Computer (auf dem ein von Unix abgeleitetes Betriebssystem ausgeführt wird, nicht Windows) sizeof(int) == 4
, aber sizeof(long) == 8
.
Es sind verschiedene Typen - manchmal gleich groß, manchmal nicht.
(In den wirklich alten Tagen waren sizeof(int) == 2
und sizeof(long) == 4
- obwohl dies die Tage vor C++ gewesen sein könnten, denken Sie darüber nach. Technisch gesehen ist dies jedoch eine legitime Konfiguration. wenn auch außerhalb des eingebetteten Raums ungewöhnlich und möglicherweise sogar im eingebetteten Raum ungewöhnlich.)
Auf Plattformen, auf denen beide dieselbe Größe haben, ist die Antwort nichts. Beide repräsentieren vorzeichenbehaftete 4-Byte-Werte.
Sie können sich jedoch nicht darauf verlassen, dass dies wahr ist. Die Größe von long und int ist in der Norm nicht endgültig festgelegt. Es ist für Compiler möglich, den Typen unterschiedliche Größen zuzuweisen und damit diese Annahme zu brechen.
Das Long muss mindestens so groß sein wie ein Int und möglicherweise, aber nicht unbedingt länger.
Auf gängigen 32-Bit-Systemen sind sowohl int als auch long 4 Byte/32 Bit, und dies gilt gemäß der C++ - Spezifikation.
Auf anderen Systemen können sowohl int als auch long long eine andere Größe haben. Ich habe auf einer Plattform gearbeitet, auf der int 2 Byte und long 4 Byte lang war.
Eine typische Best Practice ist, Long/Int/Short nicht direkt zu verwenden. Packen Sie sie stattdessen gemäß der Spezifikation der Compiler und des Betriebssystems in eine Header-Datei, um sicherzustellen, dass sie genau die gewünschte Anzahl von Bits enthalten. Verwenden Sie dann int8/int16/int32 anstelle von long/int/short. Unter 32-Bit-Linux können Sie beispielsweise einen Header wie diesen definieren
typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;