【问题标题】:C++ type unsigned long int [duplicate]C ++类型无符号长整数[重复]
【发布时间】:2012-07-31 13:21:38
【问题描述】:

unsigned long int 是否等同于 unsigned long ? 在 C++ 中

在我看来,它们是相同的。但我看到有些人仍在代码中使用 unsigned long int。 不明白为什么?谁能帮我解释一下

#include <stdio.h>

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

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    是的。

    long 只是long int 的简写。这是因为原则上long 只是一个限定符(例如,它也可以用于延长double 数据类型)

    来自 C++ ISO 标准,第 7.1.5.2 节,等效类型说明符表:

    【讨论】:

    • 我看到在您的表格中,除了字符之外,每种类型都省略了 signed 标记。这是故意的还是表格中的错误?
    • @RikSchaaf - 不,这不是一个错误。标准规定,charsigned 还是unsigned 类型是由实现定义的。而且,事实上,char 实际上是与unsigned charsigned char 不同的类型。这与所有其他整数类型不同,除非使用了 unsigned 关键字,否则它们都是 signed
    • @Sebastian 很想知道。我通过 2 个问题的答案和 cmets 阅读了一下,以了解两者存在的原因。感谢您的澄清。
    【解决方案2】:

    C99 标准的§6.7.2 给出了以下类型列表(这只是一个摘录):

    • shortsigned shortshort intsigned short int
    • unsigned short,或unsigned short int
    • intsignedsigned int
    • unsigned,或unsigned int
    • longsigned longlong intsigned long int
    • unsigned long,或unsigned long int
    • long longsigned long longlong long intsigned long long int
    • unsigned long long,或unsigned long long int

    还有以下几点:

    (5) 每个逗号分隔的集合都指定相同的类型,除了位域,说明符int 指定与signed int 相同的类型还是与@ 相同的类型是实现定义的987654346@.

    【讨论】:

    • 虽然这是一个 C++ 问题 ;)
    • 是的,C++ 问题的代码包含stdio.h 并使用printf ;)
    • 对 :P 有时,我只看标签,有时只看代码,我也陷入了这个困境:D
    • 无论如何,这个问题都被标记为 C 和 C++。
    • 最初不是。 C标签是在一年多之后添加的。
    【解决方案3】:

    是的unsignedsignedshortlonglong long 都是 XXX int 的简单类型说明符。

    参见标准中的7.1 说明符[dcl.spec]

    3 [注意:由于默认情况下有符号、无符号、长和短意味着 int,类型名称出现在以下之一之后 这些说明符被视为(重新)声明的名称。 [ 例子:

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

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

    —结束示例]—结束注释]

    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 可以忽略。

      【讨论】:

      • long unsignedint long unsigned 也是如此。
      【解决方案5】:

      是的,它们是一样的。说 unsigned long int 只是明确说明它是一个 int。

      您始终可以通过sizeof(unsigned long int)sizeof(unsigned long) 查看类型的大小

      希望这会有所帮助。

      【讨论】:

      • 我不确定您所说的“明确说明它是一个 int”是什么意思。 unsigned long intint 是两种不同的类型。 int 既是关键字又是类型的名称;名称unsigned long int 使用关键字int,但不引用类型int
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多