在 C 标准中写道,即 int 应该具有:

  • 最小值 -32767 最大值 32767

  • 但在实现中,即在 16 位机器上,值是:
  • 最小值 -32768 最大值 32767

  • 为什么会有负值的差异?

    最佳答案

    两个范围都是有效的,不寻常的是第一个 [-32767...32767] 但根据 C 标准,它是完全正确的。

    在许多实现中,短整数的最小值是 -(2^15 - 1) 然后是 -32768 。你会看到它被定义为:

    #define SHRT_MIN 0x7FFF
    #define SHRT_MIN (-32767 - 1)
    #define SHRT_MIN (-32768)
    

    标准断言它必须是 (-2^15 + 1) (然后是 -32767 ) 或更少 (因为实际值取决于特定的系统和库实现)。因为大多数实现使用二进制补码来表示负数(当 零对于整数 是无符号的),那么最小负值少一个单位。在实践中,这意味着您可以确保在编写程序时(无论编译器和平台如何)至少可以将 -32767 存储在 short 中(但对于某些编译器/平台,范围可能更宽,如您在编译器中看到的那样)。

    请注意,在这种情况下 -32768 有意义(对于 sizeof(int) > sizeof(short) 的平台),而不是 MIN_INT ,因为文字值实际上是 int (不是 short )。

    关于c - C 类型的取值范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23263978/

    10-11 15:13