C 短有符号整数和有符号整数有什么区别

C 短有符号整数和有符号整数有什么区别,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

我参考了一篇关于c的教程,我发现有符号的int和短有符号的int的范围是-32768到32767,有2个字节,如果没有的话,它们有什么区别,那么为什么要使用两种声明。

a
signed int
至少和a
short 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

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

  • long int类型的对象的最小值 隆明-9223372036854775807/-(263-1)
  • long int类型的对象的最大值 LLONG_MAX+9223372036854775807//263-1
  • 类型为unsigned long long int的对象的最大值 ULLONG_MAX 18446744073709551615//264-1
我参考了一篇关于c的教程,我发现有符号整数和短有符号整数的范围是-32768到32767,有2个字节

这是一个非常古老的教程。现代C标准与Paul R的答案一致。在32位体系结构上,通常:

    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
(甚至