回答
可能会发生溢出,因为二进制补码中整数表示的范围不对称:可以表示的最小负数的幅度是可以表示的最大正数的幅度加1。例如,在32位系统上,值为-2,147,483,648
和2,147,483,647
。这就是为什么否定-2,147,483,648
会导致溢出的原因:否定的结果为正值2,147,483,648
,不能用相同大小的int
表示。
请注意此问题的逆是不正确的:否定一个正数不会导致溢出:
if (i > 0) { i = -i; } // No overflow here
@Tom请注意,MSVC在'limits.h'中有'#define INT_MIN(-2147483647 - 1)'。 –
明白...非常感谢 – Tom
的原因整数溢出是在运算试图创建一个数值即在可以用给定位数表示的范围之外,或者大于最大值或者小于最小可表示值。
- 那么,在你的情况下,变量
i
未初始化。所以在这里会发生什么是分配给变量i
整数类型的内存空间将包含一些垃圾值。 - 如果内存地址包含最大可能的整数值
-2^31(-2,147,483,648)
,那么否定此值将导致整数溢出。
我希望这有助于。
当main启动时,您的堆栈中的“i”值是未定义的。调用main()之前运行的启动代码可以在那里留下任何东西。
Addig对Kashif说什么,负整数可以比非负整数低一个数值,因为负数不需要留下零空间。当符号反转时,符号位中的“1”(所有剩余位为零)会导致溢出。
在16位:-0x8000 ==〜为0x8000 + 1 == 0x7FFF的+ 1 ==为0x8000
// “ - ” 负值==反相+ 1 ==反转+ 1 ==最终是相同的
该值的可能性很低,但存在。它不会发生,除非堆栈恰好包含违规号码。
- 1. 为什么会发生溢出?
- 2. 下溢或溢出的指针会发生什么?
- 3. Python浮点溢出,float溢出时会发生什么?
- 4. 为什么堆栈溢出不会发生?
- 5. 这个错误是什么,为什么会发生?下面
- 6. 为什么下面的程序不会生成任何可见的输出?
- 7. 为什么下面的程序会出错?
- 8. 为什么发生字节溢出,它们实现了什么?
- 9. 为什么这两行会产生不同的溢出行为?
- 10. Swing程序中的标准输出会发生什么?
- 11. 自动递增主键的整数溢出会发生什么?
- 12. 这个输出为什么会发生?
- 13. 什么会导致Phong镜面阴影产生色域溢出?
- 14. 这里为什么会溢出?
- 15. 当C表达式发生整数溢出时会发生什么?
- 16. 为什么在页面上出现弹出窗口时发生会话输出?
- 17. 为什么在下面的Java代码中的Thread输出中2次i = 0?如果我们创建多个线程会发生什么?为什么?
- 18. 为什么会发生? java
- 19. 为什么下面的程序将-80作为输出?
- 20. 为什么下面的程序在C++中给出不同的输出?
- 21. 为什么此SqlCommand参数会产生SQLDateTime溢出错误?
- 22. 为什么你想要发生整数溢出?
- 23. 为什么这个整数溢出发生?
- 24. 在反序列化过程中对象会发生什么?
- 25. 先发中断处理程序会发生什么?
- 26. 为什么 '分段故障' 发生在下面的C代码
- 27. 为什么在这里会发生ArrayIndexOutOfBoundsException?
- 28. 当我运行下面的命令时会发生什么?
- 29. 为什么溢出数组初始化会发出警告,但溢出赋值不会?
- 30. 在UNIX shell中运行exec csh会发生什么?为什么?
未定义的行为。该变量未被初始化。并且否定最负的可能整数在二进制补码运算中产生相同的值 –
在2的补码中, INT_MIN | > INT_MAX – BLUEPIXY
当'i == INT_MIN'以2的补码表示时。 –