С++ тип unsigned long int

Является ли unsigned long int равным unsigned long? в С++

По-моему, они такие же. Но я видел, как некоторые люди все еще используют unsigned long int в коде. Не понимаю, почему? Может ли кто-нибудь объяснить это мне?

#include <stdio.h>

int main() {
    unsigned long int num = 282672; 
    int normalInt = 5;
    printf("");
    return 0;
}

Ответы

Ответ 1

Да.

long является просто сокращением для long int. Это связано с тем, что в принципе long является просто квалификатором (его также можно использовать для продления типа данных double, например)

Из стандарта С++ ISO, раздел 7.1.5.2, таблица спецификаторов эквивалентного типа:

enter image description here

Ответ 2

В §6.7.2 стандарта C99 приведен следующий список типов (это только выдержка):

  • short, signed short, short int или signed short int
  • unsigned short, или unsigned short int
  • int, signed или signed int
  • unsigned, или unsigned int
  • long, signed long, long int или signed long int
  • unsigned long, или unsigned long int
  • long long, signed long long, long long int или signed long long int
  • unsigned long long, или unsigned long long int

со следующей дополнительной точкой:

(5) Каждый из разделенных запятыми наборов обозначает один и тот же тип, за исключением того, что для бит-полей он определяется реализацией: спецификатор int обозначает тот же тип, что и signed int, или тот же тип, что и unsigned int.

Ответ 3

Да. unsigned, signed, short, long, long long все являются спецификаторами простого типа для XXX int.

См. 7.1 Спецификаторы [dcl.spec] в стандарте:

3 [Примечание: поскольку подписанный, неподписанный, длинный и короткий по умолчанию подразумевает int, имя типа появляется после одного из эти спецификаторы рассматриваются как объявленное имя (re). [Пример:

void h(unsigned Pc); // void h(unsigned int)

void k(unsigned int Pc); // void k(unsigned int)

-end example] -end note]

и 7.1.6.2 Спецификаторы простого типа [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"

Ответ 4

unsigned long int - правильное определение типа, однако int можно игнорировать.

Ответ 5

Да, они одинаковы. Высказывание unsigned long int просто явно указывает, что это int.

Вы всегда можете посмотреть размер типа sizeof(unsigned long int) и sizeof(unsigned long)

Надеюсь, что это поможет.