繁体   English   中英

short signed int和signed int之间有什么区别

[英]what is the difference between short signed int and signed int

我在c上引用了一个教程,我发现signed int和short signed int范围是-32768到32767,它是2个字节,是它们的任何区别,如果不是那么为什么使用两种声明。

它是特定于平台的 - 在此上下文中您可以确定的是sizeof(int) >= sizeof(short) >= 16 bits

您的问题的最佳答案可以在ANSI的ANSI标准中找到,第2.2.4.2节 - 数值限制 为方便起见,我在此复制了该部分的相关部分:

2.2.4.2数值限制

符合要求的实施应记录本节规定的所有限制,应在标题和规定中规定。

“整体类型的大小”

下面给出的值应替换为适用于#if预处理指令的常量表达式。 它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号。

  • 最小对象的最大位数,不是位字段(字节)CHAR_BIT 8

  • signed char SCHAR_MIN类型的对象的最小值
    -127

  • signed char SCHAR_MAX类型的对象的最大值
    +127

  • unsigned char UCHAR_MAX类型的对象的最大值
    255

  • char CHAR_MIN类型的对象的最小值,见下文

  • char CHAR_MAX类型的对象的最大值,请参见下文

  • 对于任何支持的语言环境MB_LEN_MAX,多字节字符中的最大字节数
    1

  • short int SHRT_MIN类型的对象的最小值
    -32767

  • short int SHRT_MAX类型的对象的最大值
    +32767

  • unsigned short int USHRT_MAX类型的对象的最大值
    65535

  • int INT_MIN类型的对象的最小值
    -32767

  • int INT_MAX类型的对象的最大值
    +32767

  • unsigned int UINT_MAX类型的对象的最大值
    65535

  • long int LONG_MIN类型的对象的最小值
    -2147483647

  • long int LONG_MAX类型的对象的最大值
    +2147483647

  • unsigned long int ULONG_MAX类型的对象的最大值
    4294967295

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

  • long long int类型对象的最小值LLONG_MIN -9223372036854775807 // - (263 - 1)
  • long long int类型的对象的最大值LLONG_MAX +9223372036854775807 // 263 - 1
  • unsigned long long int类型的对象的最大值ULLONG_MAX 18446744073709551615 // 264 - 1

其他几个答案正确引用了C标准,该标准在类型上设置了最小范围。 但是,正如您所看到的那样, short intint最小范围是相同的 - 所以问题仍然存在: 为什么short intint不同的? 我什么时候应该选择其中一个?

提供int的原因是提供一种类型,该类型旨在匹配所讨论的硬件上的“最有效”整数类型(仍然满足所需的最小范围)。 int是您应该在C中使用的通用小整数类型 - 它应该是您的默认选择。

如果你知道你需要的范围超过-32767到32767,你应该选择long intlong long int 如果要存储大量的小整数,这样空间效率比计算效率更重要,那么您可以选择short (或者甚至是有signed char ,如果您知道您的值将适合-127到127范围) 。

C和C ++仅对其对象进行最小大小保证。 没有确切的尺寸保证。 你不能依赖类型short正好是2个字节,只能它可以保存指定范围内的值(所以它至少是两个字节)。 int类型至少与short一样大,通常更大。 需要注意的是signed int是一个冗长的方式说intsigned short int是一个冗长的方式说short int这是一个冗长的方式说short 除了char类型(某些编译器将使其无符号)之外,默认情况下会对所有内置整数类型进行签名。 short intlong int类型分别表示shortlong较长方式。

signed int至少与short signed int一样大。 在大多数现代硬件上, short int是2个字节(如您所见),而常规int是4个字节。 较旧的体系结构通常具有2字节的int ,这可能是导致混淆的原因。

还有一个long int ,通常是4或8个字节,具体取决于编译器。

请阅读以下有关签名字符的expalination,然后我们将讨论signed / unsigned int。

首先,我想为您的问题准备背景。
................................................

char数据类型有两种类型:

无符号字符;

签名字符;

(即INTEGRAL DATATYPES)

.................................................

按照不同的书籍进行操作:
char 1byte -128到127(即默认签名字符)

签名字符1byte -128到127

unsigned char 1byte 0到255

.................................................

还有一件事1byte = 8位。(零到第7位)

由于处理器标志寄存器保留第7位用于表示符号(即1 = + ve&0 = -ve)


-37将表示为1101 1011(最高有效位为1),

+37将表示为0010 0101(最高有效位为0)。


.................................................

类似地,对于char,最后一位默认为signed


这就是为什么?

因为char也依赖于特定字符的ASCII码(例如,A = 65)。


在任何情况下,我们都使用char并仅使用7位。

在这种情况下,为了将char / int的内存范围增加1位,我们使用unsigned char或unsigned int;

谢谢你的提问。

类似地,对于4bit int或2bit int,我们需要signed int&unsigned int

这取决于平台。

Int在32位系统上为32位宽,在64位系统上为64位宽(我确信情况确实如此)。

我在c上引用了一个教程,我发现signed int和short signed int范围是-32768到32767,它是2个字节。

这是一个非常古老的教程。 根据Paul R的回答,现代C标准。 在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位机器上,尺寸amay是这样的:

    short int is 16 bits
          int is 16 bits
     long int is 32 bits
long long int is 64 bits

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM