我计算出存储在int数据类型中的两个可能数字的补码范围是+32767到-32768,而不是我在CodeBlocks上给了一个int值
大于32767,它的工作原理!
我知道如果你给一个数组的值多于声明的值,它将比它应该消耗更多的比特因此破坏另一个变量。
我的问题是当我给一个数据类型一个超出它的值时,会发生同样的事情
两个补充范围?如果不是发生了什么...
答案 0 :(得分:0)
int
的最小大小为16位,可以保存-32,768到+32,767。它的实际大小因操作系统而异,从编译器到编译器。 ISO C标准要求int
能够保持至少-32,767到+32,767,但不能将其限制为仅这些值。
允许更大,并且可以在任何现代32位或64位操作系统上使用。 20年前,在16位DOS中,您会看到16位int
,但在任何现代操作系统中,它通常都是32位。
如果溢出signed int
,则行为未定义。理论上,编译器可以做任何事情,因为符合C程序不应该触发溢出。在实践中,值通常会从正面变为负面,反之亦然。
溢出unsigned int
是明确定义的。值保证包装。如果unsigned int
是16位,那么65535U + 1U == 0U
。如果它大于16位,则65535U + 1U == 65536U
(无溢出)。