为什么Turbo C Wraparound每次签名的整数溢出,尽管签名的整数溢出是不确定的
Why turbo c wraparound signed integer overflow every time though signed integer overflow is undefined?
我已经签名多次,但每次涡轮c环绕。例如:
#include <stdio.h>
void main() {
int i = 100000;
printf("%d", i);
getch();
}
输出是-31072
,如果围栏完成,则是预期的输出。在二进制100000(dec)
中是11000011010100000
,最后16位存储是1000011010100000
。在两个补充表示中1000011010100000
是-31072
。
您的示例没有任何签名的溢出,因此没有不确定的行为。
(假设int_max小于100000。)
分配:
int i=100000;
执行来自类型长的隐式转换,即整数常数100000的类型到type int。转换的结果是实现定义 1 (或实现定义的陷阱是信号)。
1 (引用来自:ISO/IEC 9899:201X 6.3.1.3签名和未签名的整数3)
否则,将签署新类型,并且该值不能在其中表示;要么结果是实现定义的,或者提出了实现定义的信号。
相关文章:
- 整数溢出,最大值为 pow(10,19)
- 模函数,避免C++整数溢出
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 我很难理解这些关于检测整数溢出的评论
- 检测 32 位整数溢出
- 如何在没有整数溢出的情况下找到n%(k*k)
- C 中俄罗斯农民算法中的整数溢出
- 检查Android NDK COD中的整数溢出
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 如何修复整数溢出警告
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 整数溢出是否会影响其他变量
- 为什么功能不给整数溢出
- 有符号整数溢出、内部函数和未定义的行为
- 整数溢出不会发生:它们从0重新启动
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 为什么Turbo C Wraparound每次签名的整数溢出,尽管签名的整数溢出是不确定的
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性