Was ist der Unterschied zwischen "long", "long long", "long int" und "long long int" in C ++?
Wechsel bin ich von Java zu C++ und habe einige Fragen über die long
Daten geben. In Java, um eine ganze Zahl größer als 232Sie würde einfach schreiben long x;
. Aber in C++, es scheint, dass long
ist sowohl ein Datentyp und ein Bezeichner.
Scheint es mehrere Möglichkeiten zu verwenden long
:
long x;
long long x;
long int x;
long long int x;
Auch, es scheint, es sind Dinge wie:
long double x;
und so weiter.
Was ist der Unterschied zwischen all diesen verschiedenen Daten-Typen, und haben Sie alle den gleichen Zweck?
InformationsquelleAutor der Frage 1110101001 | 2013-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
long
undlong int
identisch sind. So sindlong long
undlong long int
. In beiden Fällen, dieint
ist optional.Als der Unterschied zwischen die zwei Sätze, die C++ - standard-Mandate minimum reicht für jeden, und dass
long long
ist bei mindestens so breit wielong
.Das controlling, Teile der standard (C++11, aber das hat schon für eine lange Zeit) sind, zum einen
3.9.1 Fundamental types
Abschnitt 2 (in einem späteren Abschnitt gibt ähnliche Regeln für die vorzeichenlose Integrale Typen):Gibt es auch eine Tabelle, die 9 in
7.1.6.2 Simple type specifiers
das zeigt die "mappings" von den Planern der tatsächlichen Arten (die zeigen, dass dieint
ist optional), ein Teil davon ist nachfolgend dargestellt:Beachten Sie den Unterschied zwischen dem Planer und dem Typ. Der Planer ist, wie Sie sagen, der compiler, welchen Typ ist, aber Sie können verwenden verschiedene Bezeichner, um am Ende in den gleichen Typ.
Daher
long
auf seine eigene, ist weder ein Typ noch einen Modifizierer wie Ihre Frage postuliert, es ist einfach ein Bezeichner für dielong int
geben. Dito fürlong long
wird ein Bezeichner für dielong long int
geben.Obwohl der C++ - standard selbst ist nicht angegeben, die minimalen Wertebereiche der ganzzahligen Typen, es tut cite C99, in
1.2 Normative references
als die Anwendung. Daher die minimalen Bereiche, die, wie inC99 5.2.4.2.1 Sizes of integer types <limits.h>
anwendbar sind.In Bezug auf
long double
das ist eigentlich eine floating-point-Wert eher als eine Ganzzahl. Ebenso zu den integralen Typen, ist es erforderlich, mindestens so viel Präzision wie eindouble
und um eine Obermenge der Werte über diesen Typ (also mindestens diese Werte nicht unbedingt mehr Werte).InformationsquelleAutor der Antwort paxdiablo
Long und long int mindestens 32 bit.
long long und long long int mindestens 64 bits. Sie müssen einen c99-compiler oder besser.
lange doubles sind ein bisschen merkwürdig. Schauen Sie auf Wikipedia für details.
InformationsquelleAutor der Antwort Eric Lippert
long
entsprichtlong int
nur alsshort
entsprichtshort int
. Einlong int
ist eine vorzeichenbehaftete Integrale Typ, der mindestens 32 bits, während einlong long
oderlong long int
ist eine vorzeichenbehaftete Integrale Typ ist mindestens 64 bit.Dies bedeutet nicht unbedingt, dass ein
long long
breiter alslong
. Viele Plattformen /ABIs verwenden Sie dieLP64
Modell - wolong
(und Zeiger) sind 64 bit breit. Win64 verwendet dieLLP64
wolong
ist noch auf 32 bit, und dielong long
(und Zeiger) sind 64 bit breit.Gibt es eine gute Zusammenfassung der 64-bit-Daten-Modelle hier.
long double
garantiert nicht viel anderes als es werden mindestens so breit wie eindouble
.InformationsquelleAutor der Antwort Brett Hale
Das sieht verwirrend, weil Sie unter
long
als Datentyp selbst.long
ist nichts, sondern nur die Kurzform fürlong int
wenn Sie es allein.long
ist ein modifier, können Sie es mitdouble
auch alslong double
.long
==long int
.Beide nehmen 4 bytes.
InformationsquelleAutor der Antwort Siraj
Historisch in der frühen C-Zeiten, als die Prozessoren hatten die 8-oder 16-bit wordlength,
int
war identisch mit der heutigenshort
(16 bit). In einem gewissen Sinne, int ist ein abstrakter Datentyp alschar
,short
,long
oderlong long
wie Sie können nicht sicher sein, über die bitwidth.Beim definieren
int n;
man könnte es übersetzen mit "geben Sie mir den besten Kompromiss von bitwidth und die Geschwindigkeit auf dieser Maschine für n". Vielleicht in der Zukunft, sollten Sie erwarten, Compilern zu übersetzenint
zu 64 bit. Also, wenn Sie möchten, dass Ihre Variablen haben 32 bit und nicht mehr, besser eine explizitelong
als Datentyp.[Edit:
#include <stdint.h>
scheint der richtige Weg, um sicherzustellen, bitwidths mit der int - ##_t-Typen, obwohl es noch nicht Teil des standard.]InformationsquelleAutor der Antwort thomiel