【发布时间】:2020-10-27 22:42:07
【问题描述】:
谁能解释为什么下面的代码输出-1:
#include <stdio.h>
main()
{
int number = 4294967295; /* the maximum integer
that can be represented in 4 bytes (2 ^ 32 -1) */
printf("Maximun Number: %d\n", number); // why this output is strange it prints "-1". outputs: Maximum Number: -1
printf("sizeof integer: %dbytes", sizeof(int)); // outputs: sizeof integer: 4bytes
}
如您所见,我已经存储了可以存储在 4bytes 中的最大整数(2 ^ 32 -1)在 int 变量中 C 但我不知道为什么会输出 -1 这太奇怪了.这是undefined behavior。
这是在C standard 中的某处提到的,如果您提供任何链接,我可以阅读任何解释都非常感谢
【问题讨论】:
-
int是有符号类型。您所说的“最大整数”是~可以存储在int中的可能数字的总数,但由于可能数字的负半数,实际可能的最大整数实际上约为一半。 -
非常感谢,所以在上面的代码中它的整数溢出对吗?
-
正如@Chris 所说,它被隐式转换为包含所有
1位的long unsigned int。当您尝试将其打印为int二进制补码时,所有1位都是十进制的-1。