Est-ce que unsigned long int
est équivalent à unsigned long
? En C++
À mon avis, ils sont les mêmes. Mais j'ai vu des gens qui utilisaient encore unsigned long int en code ... Je ne comprends pas pourquoi? Quelqu'un pourrait-il l'expliquer pour moi
#include <stdio.h>
int main() {
unsigned long int num = 282672;
int normalInt = 5;
printf("");
return 0;
}
long
est juste un raccourci pour long int
. En effet, long
est en principe un qualificateur (il peut également être utilisé pour prolonger un type de données double
, par exemple)
De la norme ISO C++, section 7.1.5.2, une table de spécificateurs de type équivalents:
Le § 6.7.2 de la norme C99 donne la liste suivante de types (il ne s'agit que d'un extrait):
short
, signed short
, short int
ou signed short int
unsigned short
ou unsigned short int
int
, signed
ou signed int
unsigned
ou unsigned int
long
, signed long
, long int
ou signed long int
unsigned long
ou unsigned long int
long long
, signed long long
, long long int
ou signed long long int
unsigned long long
ou unsigned long long int
avec le point supplémentaire suivant:
(5) Chacun des ensembles séparés par des virgules désigne le même type, à l'exception du fait que pour les champs de bits, le spécificateur
int
désigne le même type quesigned int
ou le même type queunsigned int
.
Oui. unsigned
, signed
, short
, long
, long long
sont tous des spécificateurs de type simples pour XXX int
.
Voir 7.1 Spécificateurs [dcl.spec] dans la norme:
3 [Remarque: puisque signé, non signé, long et court par défaut impliquent int, un nom de type qui apparaît après l'un de ces spécificateurs est traité comme le nom en cours de déclaration. [ Exemple:
void h(unsigned Pc); // void h(unsigned int)
void k(unsigned int Pc); // void k(unsigned int)
—Fin exemple] —fin remarque]
et 7.1.6.2 Spécificateurs de type simples [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
est la définition de type correcte, cependant int
peut être ignoré.
Oui, ils sont pareils. Dire unsigned long int
signifie simplement explicitement qu'il s'agit d'un int.
Vous pouvez toujours regarder la taille du type par sizeof(unsigned long int)
et sizeof(unsigned long)
J'espère que cela t'aides.