webentwicklung-frage-antwort-db.com.de

Unterschied zwischen Long- und Int-Datentypen

In Anbetracht dessen, dass die folgenden Anweisungen 4, was ist der Unterschied zwischen den int und long Typen in C++?

sizeof(int)
sizeof(long)
46
Alex

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.

53
Paul Sonier

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.)

42
Dan Olson

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.)

17

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.

4
JaredPar

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.

3
abelenky

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;
2
fwlx