Ist unsigned long int Äquivalent zu unsigned long ? in C++
Meiner Meinung nach sind sie gleich. Aber ich habe einige Leute gesehen, die immer noch unsigned long int im Code verwenden. Verstehe nicht warum? Kann mir das jemand erklären
#include <stdio.h>
int main() {
unsigned long int num = 282672;
int normalInt = 5;
printf("");
return 0;
}
Ja.
long ist nur eine Abkürzung für long int. Das liegt daran, im Prinzip long ist nur ein Qualifizierer (es kann auch zur Verlängerung von a verwendet werden double Datentyp, zum Beispiel)
Aus C++ ISO Standard, Abschnitt 7.1.5.2, eine Tabelle mit äquivalenten Typbezeichnern:
Ich sehe, dass in Ihrer Tabelle jeder Typ das weglässt signed Token, außer Zeichen. Ist das Absicht oder ist das ein Fehler in der Tabelle?
– Rik Schaaf
27. Mai 2015 um 22:27 Uhr
Nein, das ist kein Fehler. Siehe auch stackoverflow.com/a/2054941/478658 und stackoverflow.com/a/87648/478658
– Sebastian
18. September 2016 um 6:00 Uhr
@RikSchaaf – Nein, es ist kein Fehler. Die Standards legen fest, dass die Implementierung definiert ist, ob char ist ein signed oder unsigned Typ. Und tatsächlich, char ist eigentlich eine unterschiedliche Art von beiden unsigned char und signed char. Dies unterscheidet sich von allen anderen ganzzahligen Typen, die sind signed es sei denn, die unsigned Schlüsselwort verwendet wird.
– Petrus
12. August 2017 um 0:28 Uhr
@Sebastian Interessant zu wissen. Ich habe die Antworten und Kommentare der beiden Fragen ein wenig durchgelesen, um den Grund dafür zu finden, warum beide existieren. Danke für die Klarstellung.
– Rik Schaaf
3. Februar 2018 um 8:51 Uhr
§6.7.2 des C99-Standards gibt die folgende Liste von Typen (dies ist nur ein Auszug):
short, signed short, short intoder signed short int
unsigned shortoder unsigned short int
int, signedoder signed int
unsignedoder unsigned int
long, signed long, long intoder signed long int
unsigned longoder unsigned long int
long long, signed long long, long long intoder signed long long int
unsigned long longoder unsigned long long int
mit folgendem Zusatzpunkt:
(5) Jeder der durch Kommas getrennten Sätze bezeichnet den gleichen Typ, außer dass es für Bitfelder implementierungsdefiniert ist, ob der Spezifizierer int bezeichnet den gleichen Typ wie signed int oder vom gleichen Typ wie unsigned int.
Obwohl dies eine C++-Frage ist;)
– Sebastian Mach
2. August 2012 um 15:16 Uhr
Ja, C++-Frage mit Code, der enthält stdio.h und verwendet printf 😉
– Christo Iljew
2. August 2012 um 15:20 Uhr
Richtig 😛 Manchmal schaue ich nur auf die Tags, manchmal nur auf den Code und falle auch darauf herein 😀
– Sebastian Mach
2. August 2012 um 18:45 Uhr
Die Frage ist sowieso sowohl mit C als auch mit C++ gekennzeichnet.
– Petrus
12. August 2017 um 0:30 Uhr
Das war es anfangs nicht. Das C-Tag wurde mehr als ein Jahr später hinzugefügt.
– Christo Iljew
13. August 2017 um 21:06 Uhr
Sebastian Mach
Ja. unsigned, signed, short, long, long long alle sind einfache Typbezeichner für XXX int.
Sehen 7.1 Spezifizierer [dcl.spec] im Standard:
3 [ Note: Since signed, unsigned, long, and short by default imply int, a type-name appearing after one of
those specifiers is treated as the name being (re)declared. [ Example:
void h(unsigned Pc); // void h(unsigned int)
void k(unsigned int Pc); // void k(unsigned int)
—end example ] —Endnote]
und 7.1.6.2 Einfache Typbezeichner [dcl.type.simple]
Table 10 — simple-type-specifiers and the types they specify
Specifier(s) | Type
------------------------+---------------------------------
type-name | the type named
simple-template-id | the type as defined in 14.2
char | “char”
unsigned char | “unsigned char”
signed char | “signed char”
char16_t | “char16_t”
char32_t | “char32_t”
bool | “bool”
unsigned | “unsigned int”
unsigned int | “unsigned int”
signed | “int”
signed int | “int”
int | “int”
unsigned short int | “unsigned short int”
unsigned short | “unsigned short int”
unsigned long int | “unsigned long int”
unsigned long | “unsigned long int”
unsigned long long int | “unsigned long long int”
unsigned long long | “unsigned long long int”
signed long int | “long int”
unsigned long int ist jedoch die richtige Typdefinition int kann ignoriert werden.
Ja, sie sind gleich. Sprichwort unsigned long int gibt einfach explizit an, dass es sich um ein int handelt.
Sie können sich jederzeit die Größe des Typs ansehen sizeof(unsigned long int) und sizeof(unsigned long)
Hoffe das hilft.
Ich bin mir nicht sicher, was Sie mit “explizit angeben, dass es sich um ein int handelt” meinen. unsigned long int und int sind zwei unterschiedliche Arten. int ist sowohl ein Schlüsselwort als auch der Name eines Typs; der Name unsigned long int verwendet das Schlüsselwort intbezieht sich aber nicht auf den Typ int.
– Keith Thompson
16. Oktober 2013 um 17:35 Uhr
Ich bin mir nicht sicher, was Sie mit “explizit angeben, dass es sich um ein int handelt” meinen. unsigned long int und int sind zwei unterschiedliche Arten. int ist sowohl ein Schlüsselwort als auch der Name eines Typs; der Name unsigned long int verwendet das Schlüsselwort intbezieht sich aber nicht auf den Typ int.
– Keith Thompson
16. Oktober 2013 um 17:35 Uhr
12983700cookie-checkC++-Typ unsigned long int [duplicate]yes