C++ C和C+中的整数类型+;,以及printf对它们的解释

C++ C和C+中的整数类型+;,以及printf对它们的解释,c++,c,integer,printf,C++,C,Integer,Printf,我最近回答了一个关于这一点的问题,并发现自己在这个过程中对一些事实有点不确定,因此我想再次断言这些事实: C和C++中的整数类型: char:大小为1字节的整数值 short:大小为2字节的整数值 long:大小为4字节的整数值 long-long:大小为8字节的整数值 类型short、long和long通常后跟int 但是,这不是必须的,我们可以在不使用int的情况下使用它们 或者,我们可以只声明int,但不同的编译器可能会对其进行不同的解释 总结一下: short与short int相

我最近回答了一个关于这一点的问题,并发现自己在这个过程中对一些事实有点不确定,因此我想再次断言这些事实:

  • C和C++中的整数类型:

    • char
      :大小为1字节的整数值

    • short
      :大小为2字节的整数值

    • long
      :大小为4字节的整数值

    • long-long
      :大小为8字节的整数值


    类型
    short
    long
    long
    通常后跟
    int

    但是,这不是必须的,我们可以在不使用
    int
    的情况下使用它们

    或者,我们可以只声明
    int
    ,但不同的编译器可能会对其进行不同的解释

    总结一下:

    • short
      short int
      相同,但不一定与
      int
      相同

    • long
      long int
      相同,但不一定与
      int
      相同

    • long-long
      long-long-int
      相同,但不一定与
      int
      相同

    • 在给定的编译器上,
      int
      short int
      long int
      long long int

  • 使用
    printf
    打印整数:

    -
    printf(“%d”…)
    从堆栈中读取
    int

    -
    printf(“%ld”…)
    从堆栈中读取一个
    long int

    -
    printf(“%lld”…)
    从堆栈中读取
    long int

    因此:

    -
    printf(“%ld”…)
    将在任何给定平台上读取4个字节

    -
    printf(“%lld”…)
    将在任何给定平台上读取8个字节

    -
    printf(“%d”…)
    将读取2字节、4字节或8字节,具体取决于给定平台上
    int
    的定义

  • 上述描述中是否有空洞?


    谢谢

    这里有几个相当大的洞

    char
    始终占用1个字节。这是唯一一种保证尺寸的类型。所有其他字节基本上都是1个或更多字节,并且足够大,可以容纳指定的值范围(16位表示
    short
    int
    ,32位表示
    long
    ,64位表示
    long

    换句话说,您给出的尺寸非常常见,但不能保证

    使用
    printf

    • “%d”指定一个
      int
    • “%ld”指定一个
      long int
    • “%lld”指定一个
      long int
    如上所述,每个都有一个指定的最小范围,但不是所需的大小


    同样,该标准实际上并没有指定机器有一个堆栈(还有一些,比如IBM大型机和旧的CRE),但是如果你只考虑抽象的行为需求,那么你所得到的肯定是LIFO(Stas-like)要求。对于给定的平台,任何整数类型的大小是多少,而无需咨询,并且可能是。但是,您可以确保

    printf
    格式字符串将正确的模式与给定实现中传递到堆栈上的正确大小的整数相关联。

    您的一些断言不正确,因为它们因平台而异。要确切地知道您的类型的宽度,请打开
    limits.h
    float.h
    文件。您还可以使用
    sizeof
    运算符

    请记住,
    char
    始终是一个字节,不管它有多少位。也就是说,在某些机器上,
    char
    是8位,而在另一台机器上,
    char
    是16位。在每种情况下,它都被视为一个字节。其他类型是字符的倍数

    许多问题……
    很多答案

    OP:
    long
    :大小为4字节的整数值。
    A:
    long
    是一个最小范围为-2147483647到+2147483647的整数,因此它至少需要32位

    OP:
    long
    :大小为8字节的整数值。
    A:
    long-long
    是一个最小范围为-9223372036854775807到+9223372036854775807的整数,因此它至少需要64位


    OP:type
    short
    long
    long
    后面通常跟有
    int

    答:我看到的
    short
    long
    long
    更多的是它们自己,而不是后面的
    int
    ,除非是像C规范那样的迂腐用法。
    答:进一步(不是我的意见):
    shortinti
    shorti
    相同
    long int i
    long i
    相同
    long int i
    long i
    相同
    答:此外:
    short signed int i
    short i
    相同
    short
    signed
    int
    可能以任何顺序出现,且结果相同

    OP:但是,这不是必须的,我们可以在没有
    int
    的情况下使用它们
    A:是的。见上文

    OP:或者,我们可以只声明
    int
    ,但不同的编译器可能会对其进行不同的解释。
    答:大小/范围可能会改变,但
    short
    signed short
    signed short int
    相同。这适用于“long”和“long long”,但不适用于“char”

    OP:
    short
    short int
    相同,但不一定与
    int
    相同
    A:是的

    OP:
    long
    是相同的