web-dev-qa-db-fra.com

Type C++ unsigned long int

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;
}
17
Anders Lind

Oui.

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:

enter image description here

19
Tibor

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 que signed int ou le même type que unsigned int.

4
Hristo Iliev

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”
1
Sebastian Mach

unsigned long int est la définition de type correcte, cependant int peut être ignoré.

0
trojanfoe

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.

0
NX1