我在c上引用了一个教程,我找到了签名的int& short signed int范围是-32768到32767,它是2个字节,是它们的任何区别,如果不是那么为什么使用两种声明。
答案 0 :(得分:9)
这是特定于平台的 - 在此上下文中您可以确定的是sizeof(int) >= sizeof(short) >= 16 bits
。
答案 1 :(得分:8)
您的问题的最佳答案可以在ANSI的ANSI标准中找到,第2.2.4.2节 - 数值限制。为方便起见,我在这里重现了该部分的相关部分:
2.2.4.2数值限制
符合要求的实施应 记录中指定的所有限制 本节应予以具体说明 在标题和
“整数类型的大小”
以下给出的值应为 由常量表达式替换 适用于#if预处理 指令。其 实现定义的值应为 等于或大于等级 (绝对值)显示的那些,用 同一个标志。
最小的最大位数 不是位字段的对象(字节) CHAR_BIT 8
类型对象的最小值 签名char SCHAR_MIN
-127类型对象的最大值 签名字符SCHAR_MAX
+127类型对象的最大值 unsigned char UCHAR_MAX
255- 之下
类型对象的最小值 char CHAR_MIN看 在
- 之下
类型对象的最大值 char CHAR_MAX见 在
a中的最大字节数 多字节字符,适用于任何支持的字符 区域设置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
答案 2 :(得分:3)
其他几个答案都正确引用了C标准,该标准在类型上设置了最小范围。但是,如您所见,short int
和int
的最小范围相同 - 所以问题仍然存在:为什么short int
和int
不同?我何时应该选择其中一个?
提供int
的原因是提供意图的类型以匹配相关硬件上的“最有效”整数类型(仍满足最低要求范围) )。你应该在C中使用int
作为通用的小整数类型 - 它应该是你的默认选择。
如果您知道自己需要的范围超过-32767到32767,则应选择long int
或long long int
。如果您要存储大量小整数,这样空间效率比计算效率更重要,那么您可以选择short
(甚至signed char
,如果您知道您的值适合-127到127范围)。
答案 3 :(得分:2)
C和C ++只对其对象进行最小尺寸保证。没有确切的尺寸保证。您不能依赖类型short
正好是2个字节,只能它可以保存指定范围内的值(因此它至少是两个字节)。类型int
至少与short
一样大,通常更大。请注意signed int
是一种冗长的方式来说int
,而signed short int
是一种冗长的方式来说short int
,这是一种冗长的说法{{} 1}}。除了类型short
(某些编译器将使其无符号)之外,默认情况下会对所有内置整数类型进行签名。类型char
和short int
分别是long int
和short
的较长方式。
答案 4 :(得分:1)
signed int
至少与short signed int
一样大。在大多数现代硬件上,short int
是2个字节(如您所见),常规int
是4个字节。较旧的体系结构通常有一个2字节int
,这可能是导致您混淆的原因。
还有一个long int
,通常是4或8个字节,具体取决于编译器。
答案 5 :(得分:1)
请阅读以下有关签名字符的填写,然后我们将讨论签名/未签名的int。
首先,我想为您的问题准备背景。
................................................ />
char数据类型有两种类型:
unsigned char;
签名char;
(即INTEGRAL DATATYPES)
............................................... ..
根据不同的书籍发布:
char 1byte -128到127(即默认签名字符)
签名char 1byte -128到127
unsigned char 1byte 0 to 255
............................................... ..
还有1byte = 8位。(0到7位)
由于处理器标志寄存器保留第7位用于表示符号(即1 = + ve& 0 = -ve)
-37将表示为1101 1011(最高有效位为1),
+37将表示为0010 0101(最高有效位为0)。
............................................... ..
同样,对于char,最后一位默认为签名
这就是为什么?
因为char还依赖于特定字符的ASCII码(例如,A = 65)。
在任何情况下,我们都使用char并仅使用7位。
在这种情况下,为了将char / int的内存范围增加1位,我们使用unsigned char或unsigned int;
感谢您提出问题。
同样对于4bit int或2bit int我们需要签名int& unsigned int
答案 6 :(得分:0)
这取决于平台。
在32位系统上Int为32位宽,在64位系统上为64位宽(我确信情况确实如此)。
答案 7 :(得分:0)
我在c上引用了一个教程,我找到了签名的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位机器上,尺寸可能是这样的:
short int is 16 bits
int is 16 bits
long int is 32 bits
long long int is 64 bits