C中“short int”和“int”有什么区别?

C中的short int(或short)和int有何不同? 它们具有相同的尺寸和范围。 如果它们基本相同,那么有两种数据类型的用途是什么?

它们可能具有相同的大小,但保证int等于或大于short int

理论上/通过C标准,只要short <= int ,它们就可以是任何大小。

在现实世界中,这就是尺寸的实现方式。

 CPU short int 8 bit 16 16 16 bit 16 16 32 bit 16 32 64 bit 16 32 

永远不要依赖C中给定大小的数据类型。如果有疑问,请务必检查limits.h中的边界。

C99 N1256标准草案

我们现在肯定的是:

 2 <= sizeof(short) <= sizeof(int) 

5.2.4.2.1整数类型的大小给出最小大小:

1 [...]它们的实施定义值的大小(绝对值)应等于或大于[...]

  • UCHAR_MAX 255 // 2 8 - 1
  • USHRT_MAX 65535 // 2 16 - 1
  • UINT_MAX 65535 // 2 16 - 1
  • ULONG_MAX 4294967295 // 2 32 - 1
  • ULLONG_MAX 18446744073709551615 // 2 64 - 1

6.2.5类型然后说:

8对于具有相同签名和不同整数转换等级的任何两个整数类型(见6.3.1.1),具有较小整数转换等级的类型的值范围是另一种类型的值的子范围。

6.3.1.1布尔值,字符和整数确定相对转换等级:

1每个整数类型都有一个整数转换等级,定义如下:

  • long long int的等级应大于long int的等级,该等级应大于int的等级,其应大于short int的等级,short rank应大于signed char的等级。
  • 任何无符号整数类型的等级应等于相应的有符号整数类型的等级(如果有的话)。
  • 对于所有整数类型T1,T2和T3,如果T1的秩大于T2且T2的秩大于T3,则T1的秩大于T3

这取决于系统。 对于这两种类型,某些操作系统的长度不同。

“一种编程语言中的短整数在不同语言或不同处理器上的大小可能不同。在某些语言中,这个大小在不同平台上是固定的,而在其他语言中则与机器有关。在某些语言中,此数据类型不存在一点都不。“

资源

实际上一切都取决于编译器和系统。 但是基本规则说int永远不会短于,而且永远不会长于大。

short <= int <= long

我今天也在努力。 我的结论是它取决于程序执行的机器架构的字长。 根据C99 limits.h文档。

 /* Minimum and maximum values a `signed short int' can hold. */ # define SHRT_MIN (-32768) # define SHRT_MAX 32767 /* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */ # define USHRT_MAX 65535 /* Minimum and maximum values a `signed int' can hold. */ # define INT_MIN (-INT_MAX - 1) # define INT_MAX 2147483647 /* Maximum value an `unsigned int' can hold. (Minimum is 0.) */ # define UINT_MAX 4294967295U /* Minimum and maximum values a `signed long int' can hold. */ # if __WORDSIZE == 64 # define LONG_MAX 9223372036854775807L # else # define LONG_MAX 2147483647L # endif # define LONG_MIN (-LONG_MAX - 1L) /* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */ # if __WORDSIZE == 64 # define ULONG_MAX 18446744073709551615UL # else # define ULONG_MAX 4294967295UL # endif 

如果有人有更好的答案,请告诉我。

short和int必须至少为16位,long必须至少为32位,而short不会超过int,这不会超过long。 通常,short为16位,long为32位,int为16位或32位。