short signed int和signed int之间有什么区别

jer*_*rry 3 c

我在c上引用了一个教程,我发现signed int和short signed int范围是-32768到32767,它是2个字节,是它们的任何区别,如果不是那么为什么使用两种声明.

Pau*_*l R 9

它是特定于平台的 - 在这种情况下你可以确定的就是这一点sizeof(int) >= sizeof(short) >= 16 bits.


Vij*_*hew 8

您的问题的最佳答案可以在ANSI的ANSI标准中找到,第2.2.4.2节 - 数值限制.为方便起见,我在此复制了该部分的相关部分:

2.2.4.2数值限制

符合要求的实施应记录本节规定的所有限制,应在标题和规定中规定.

"整体类型的大小"

下面给出的值应替换为适用于#if预处理指令的常量表达式.它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.

  • 最小对象的最大位数,不是位字段(字节)CHAR_BIT 8

  • signed char SCHAR_MIN
    -127 类型的对象的最小值

  • signed char SCHAR_MAX
    +127 类型的对象的最大值

  • unsigned char UCHAR_MAX
    255 类型的对象的最大值

  • char CHAR_MIN类型的对象的最小值,见下文

  • char CHAR_MAX类型的对象的最大值,请参见下文

  • 对于任何支持的语言环境MB_LEN_MAX
    1 ,多字节字符中的最大字节数

  • short int SHRT_MIN
    -32767 类型的对象的最小值

  • short int SHRT_MAX
    +32767 类型的对象的最大值

  • unsigned short int USHRT_MAX
    65535 类型的对象的最大值

  • int INT_MIN
    -32767 类型的对象的最小值

  • int INT_MAX
    +32767 类型的对象的最大值

  • unsigned int UINT_MAX
    65535 类型的对象的最大值

  • long int LONG_MIN
    -2147483647 类型的对象的最小值

  • long int LONG_MAX
    +2147483647 类型的对象的最大值

  • unsigned long int ULONG_MAX
    4294967295 类型的对象的最大值

未广泛实现的C99添加了以下数字类型:

  • long long int类型对象的最小值LLONG_MIN -9223372036854775807 // - (263 - 1)
  • long long int类型的对象的最大值LLONG_MAX +9223372036854775807 // 263 - 1
  • unsigned long long int类型的对象的最大值ULLONG_MAX 18446744073709551615 // 264 - 1