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

时间:2012-09-05 10:08:48

标签: c types

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

10 个答案:

答案 0 :(得分:23)

他们可能具有相同的尺寸,但保证int等于或大于short int

答案 1 :(得分:19)

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

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

<强> C99 N1256 standard draft

我们现在肯定的是:

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

5.2.4.2.1整数类型的大小<limits.h> 给出最小尺寸:

  

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),具有较小整数转换等级的类型的值范围是a   另一种类型的值的子范围。

6.3.1.1布尔,字符和整数确定相对转换排名:

  

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

     
      
  • long long int的等级应大于long int的等级,即   应大于int的等级,其应大于short的等级   int,应大于signed char的等级。
  •   
  • 任何无符号整数类型的等级应等于相应的等级   有符号整数类型,如果有的话。
  •   
  • 对于所有整数类型T1,T2和T3,如果T1的等级大于T2且T2具有   比T3更高的排名,那么T1的排名高于T3
  •   

答案 4 :(得分:1)

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

答案 5 :(得分:0)

  

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

Source

答案 6 :(得分:0)

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

短&lt; = int&lt; = long

答案 7 :(得分:0)

我今天也在努力。我的结论是它取决于程序执行的机器架构的字长。 根据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

让我知道是否有人有更好的答案。

答案 8 :(得分:0)

short和int必须至少为16位,long必须至少为32位,并且short不能大于int,即不大于long。通常,short是16位,long是32位,int是16或32位。

答案 9 :(得分:0)

这取决于编译器。 在某些编译器中 int 是 2 个字节,而在其他编译器中是 4 个字节。