[英]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类型的对象的最小值
-127signed char SCHAR_MAX类型的对象的最大值
+127unsigned char UCHAR_MAX类型的对象的最大值
255char CHAR_MIN类型的对象的最小值,见下文
char CHAR_MAX类型的对象的最大值,请参见下文
对于任何支持的语言环境MB_LEN_MAX,多字节字符中的最大字节数
1short int SHRT_MIN类型的对象的最小值
-32767short int SHRT_MAX类型的对象的最大值
+32767unsigned short int USHRT_MAX类型的对象的最大值
65535int INT_MIN类型的对象的最小值
-32767int INT_MAX类型的对象的最大值
+32767unsigned int UINT_MAX类型的对象的最大值
65535long int LONG_MIN类型的对象的最小值
-2147483647long int LONG_MAX类型的对象的最大值
+2147483647unsigned 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 int
和int
最小范围是相同的 - 所以问题仍然存在: 为什么short int
和int
不同的? 我什么时候应该选择其中一个?
提供int
的原因是提供一种类型,该类型旨在匹配所讨论的硬件上的“最有效”整数类型(仍然满足所需的最小范围)。 int
是您应该在C中使用的通用小整数类型 - 它应该是您的默认选择。
如果你知道你需要的范围超过-32767到32767,你应该选择long int
或long long int
。 如果要存储大量的小整数,这样空间效率比计算效率更重要,那么您可以选择short
(或者甚至是有signed char
,如果您知道您的值将适合-127到127范围) 。
C和C ++仅对其对象进行最小大小保证。 没有确切的尺寸保证。 你不能依赖类型short
正好是2个字节,只能它可以保存指定范围内的值(所以它至少是两个字节)。 int
类型至少与short
一样大,通常更大。 需要注意的是signed int
是一个冗长的方式说int
而signed short int
是一个冗长的方式说short int
这是一个冗长的方式说short
。 除了char
类型(某些编译器将使其无符号)之外,默认情况下会对所有内置整数类型进行签名。 short int
和long int
类型分别表示short
和long
较长方式。
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.