2016-09-29 119 views
-1

我计算出可以存储在int数据类型中的可能数字的二进制补码范围是+32767到-32768,比我在CodeBlocks上进行的并给出了一个int值大于32767的 , !

我知道,如果你给一个数组比更多的值声明它将需要更多
位比它应该从而摧毁另一个变量。

我的问题是当我给一个数据类型的值超出其
二进制补码范围时,会发生同样的事情吗?如果不是,会发生什么......二进制补码范围在c

+0

没有任何反应。很可能你的数据类型“int”实际上是32位大小。尝试打印'sizeof(int)'并查看。当你声明一个int时,你占用*四个*字节。如果您正在分配相信整数大小为两个字节的内存结构,则可能需要小心。 – LSerni

回答

0

最小值大小为int是16位,它可以容纳-32,768到+32,767。它的实际大小因操作系统而异,从编译器到编译器。 ISO C标准要求int s能够保持至少-32,767至+32,767,但不限于这些值。

它允许更大,并且适用于任何现代的32位或64位操作系统。 20年前的16位DOS中,你会看到16位的int,但在任何现代操作系统中,它通常都是32位。

如果溢出signed int行为是未定义的。理论上,编译器可以做任何事情,因为符合C程序不应该触发溢出。在实践中,价值通常会从正面到负面,反之亦然。

溢出unsigned int s是明确的。值保证包装。如果unsigned int是16位然后65535U + 1U == 0U。如果它大于16位,那么65535U + 1U == 65536U(不溢出)。

+0

这是什么意思*最小尺寸*? – RedBelly