gpt4 book ai didi

c - 整数溢出和未定义的行为

转载 作者:太空狗 更新时间:2023-10-29 16:35:14 28 4
gpt4 key购买 nike

由于可能的未定义行为,在实际加法/减法之前检测整数溢出有很多问题。所以,我的问题是

为什么它首先会产生这种未定义的行为

我能想到两个原因:

1) 在这种情况下产生异常的处理器。当然,它可以关闭,编写良好的 CRT 很可能会做到这一点。

2) 使用其他数字二进制表示的处理器(1 的补码?基数 10?)。在那种情况下,未定义的行为将表现为不同的结果(但不会崩溃!)。好吧,我们可以忍受。

那么,为什么有人应该避免引起它呢?我错过了什么吗?

最佳答案

虽然有符号溢出被指定为未定义行为的历史原因可能是这些虚假的遗留表示(ones complement/sign-magnitude)和溢出中断,但它保持未定义行为的现代原因是优化。正如 J-16 SDiZ 所暗示的,有符号溢出是未定义行为这一事实允许编译器优化一些条件,其代数真值(但不一定是表示级真值)已经由先前的分支建立。它还可能允许编译器以代数方式简化某些表达式(尤其是那些涉及乘法或除法的表达式),如果子表达式包含溢出,则可能会给出与最初编写的评估顺序不同的结果,因为允许编译器假设溢出你给它的操作数不会发生这种情况。

另一个以允许优化为目的的未定义行为的重要示例是别名规则。

关于c - 整数溢出和未定义的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3948479/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com