C中的short int(或short)和int有何不同?它们具有相同的尺寸和范围。如果它们基本相同,那么有两种数据类型的用途是什么?
答案 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)
“一种编程语言中的短整数可能是不同的大小 用不同的语言或不同的处理器。在某些语言中 这个大小是跨平台固定的,而在其他平台上则是如此 机器相关的。在某些语言中,此数据类型不存在于 所有“。
答案 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 个字节。