C 短有符号整数和有符号整数有什么区别
我参考了一篇关于c的教程,我发现有符号的int和短有符号的int的范围是-32768到32767,有2个字节,如果没有的话,它们有什么区别,那么为什么要使用两种声明。aC 短有符号整数和有符号整数有什么区别,c,C,我参考了一篇关于c的教程,我发现有符号的int和短有符号的int的范围是-32768到32767,有2个字节,如果没有的话,它们有什么区别,那么为什么要使用两种声明。asigned int至少和ashort signed int一样大。在大多数现代硬件上,short int是2个字节(如您所见),而常规的int是4个字节。较旧的体系结构通常有一个2字节的int,这可能是造成混淆的原因 还有一个long int,通常是4或8字节,具体取决于编译器。它是特定于平台的-在此上下文中,您可以确定的是si
signed int
至少和ashort signed int
一样大。在大多数现代硬件上,short int
是2个字节(如您所见),而常规的int
是4个字节。较旧的体系结构通常有一个2字节的int
,这可能是造成混淆的原因
还有一个
long int
,通常是4或8字节,具体取决于编译器。它是特定于平台的-在此上下文中,您可以确定的是sizeof(int)>=sizeof(short)>=16位
它取决于平台
int在32位系统上是32位宽的,在64位系统上是64位宽的(我确信情况是这样的)。
< P> C和C++只对它们的对象进行最小大小保证。没有确切的尺寸保证。您不能依赖类型short
正好是2个字节,只需要它可以保存指定范围内的值(因此至少是两个字节)。类型int
至少与short
一样大,而且通常更大。请注意,signed int
表示int
是一种冗长的方式,而signed short int int
表示short int
是一种冗长的方式。除了类型char
(某些编译器会将其设置为无符号)之外,默认情况下,所有内置整数类型都是有符号的。类型short int
和long int
分别是表示short
和long
的较长方式。您的问题的最佳答案可以在ANSI C标准第2.2.4.2节-数值限制中找到。为方便起见,我在此复制该部分的相关部分:
2.2.4.2数值限制
一致性实施应:
记录中规定的所有限制
本节,应予以规定
在标题和
“整数类型的大小”
以下给出的数值应为:
替换为常量表达式
适用于#if预处理
指令。他们的
实施定义值应为:
大小相等或更大
(绝对值)至所示值,带有
同样的标志
- 最小值的最大位数 不是位字段(字节)的对象 字符位8
- 类型的对象的最小值
签名字符SCHAR_MIN
-127 - 类型的对象的最大值
已签名字符集最大值
+127 - 类型的对象的最大值
无符号字符最大值
255 - 类型的对象的最小值 char_MIN见 下面
- 类型的对象的最大值 char char_MAX见 下面
- 文件中的最大字节数
多字节字符,用于任何受支持的
区域设置MB_LEN_MAX
一, - 类型的对象的最小值
短整数SHRT_MIN
-32767 - 类型的对象的最大值
短整数SHRT_MAX
+32767 - 类型的对象的最大值
无符号短整数USHRT_MAX
65535 - 类型的对象的最小值
内部最小值
-32767 - 类型的对象的最大值
int_MAX
+32767 - 类型的对象的最大值
无符号整数单位最大值
65535 - 类型的对象的最小值
长整型长_MIN
-2147483647 - 类型的对象的最大值
long int long_MAX
+2147483647 - 类型的对象的最大值
无符号长整数_最大值
4294967295
- long int类型的对象的最小值 隆明-9223372036854775807/-(263-1)
- long int类型的对象的最大值 LLONG_MAX+9223372036854775807//263-1
- 类型为unsigned long long int的对象的最大值 ULLONG_MAX 18446744073709551615//264-1
short int is 16 bits
int is 32 bits
long int is 32 bits
long long int is 64 bits
在16位机器上,int的大小通常只有16位。现在16位机器大概只限于嵌入式设备
在16位机器上,大小可能如下所示:
short int is 16 bits
int is 16 bits
long int is 32 bits
long long int is 64 bits
其他几个答案正确地引用了C标准,该标准规定了类型的最小范围。但是,正如您所看到的,对于
short int
和int
,这些最小范围是相同的,因此问题仍然存在:为什么short int
和int
是不同的?什么时候我应该选择一个而不是另一个
提供int
的原因是为了提供一种类型,该类型旨在匹配相关硬件上的“最有效”整数类型(仍然满足最低要求范围)int
是您在C中应该使用的通用小整数类型-它应该是您的默认选择
如果您知道需要的范围大于-32767到32767,则应选择long int
或long long int
。如果要存储大量小整数,因此空间效率比计算效率更重要,则可以选择short
(甚至