我在参考一份有关C语言的教程时发现,signed int和short signed int的范围都是-32768到32767,它们都占用2个字节。这两种声明方式有什么区别吗?如果没有,为什么要使用两种不同的声明方式呢?
我在参考一份有关C语言的教程时发现,signed int和short signed int的范围都是-32768到32767,它们都占用2个字节。这两种声明方式有什么区别吗?如果没有,为什么要使用两种不同的声明方式呢?
这是平台特定的 - 在这种情况下,你唯一可以确定的是sizeof(int) >= sizeof(short) >= 16 bits
。
sizeof(short)>=2
。char
可能是32位甚至64位,然后所有类型的大小都将为1(除了long long
)。但是,您确实保证char
至少为8位,short
和int
至少为16位,long
至少为32位,long long
至少为64位。自然的<=
关系也适用于连续的“较大”类型之间。 - R.. GitHub STOP HELPING ICE
- 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
short int
和int
的最小范围是相同的,因此问题在于:为什么short int
和int
是不同的?何时应该选择其中之一?int
类型的原因是为了提供一种类型,旨在匹配所涉及硬件上“最高效”的整数类型(仍满足最小要求范围)。在C中,int
应该作为通用小整数类型使用,它应该是你的默认选择。long int
或long long int
。如果你要存储大量的小整数,空间效率比计算效率更重要,那么你可以选择short
(甚至是signed char
,如果你知道你的值将适合-127到127的范围)。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个字节,具体取决于编译器。
.................................................
根据不同的书籍解释如下:
char 1字节 -128到127(即默认为有符号char)
signed char 1字节 -128到127
unsigned char 1字节 0到255
.................................................
还有一件事,1字节=8位(从第0位到第7位)。
由于处理器标志寄存器保留第7位表示符号(即1=正数,0=负数)
-37将被表示为1101 1011(最高有效位为1),
+37将被表示为0010 0101(最高有效位为0)。
.................................................
同样地,对于char,最后一位默认被视为有符号。
为什么呢?
因为char也取决于特定字符的ASCII代码(例如A=65)。
无论如何,我们都只使用char并且只使用7位。
在这种情况下,为了将char / int的内存范围增加1个位,我们使用无符号的char或无符号的int;
感谢您的问题。
类似地,对于4位int或2位int,我们需要有符号的int和无符号的int。
那是一份非常老的教程。现代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位机器上,整数的大小通常只有16位。如今,16位机器可能仅限于嵌入式设备。
在16位机器上,变量的大小可能是这样的:
short int is 16 bits
int is 16 bits
long int is 32 bits
long long int is 64 bits
这取决于平台。
在32位系统上,int为32位宽度,在64位系统上为64位宽度(我确定这总是如此)。