我和朋友讨论了一些代码,这个概念出现了。我们还没有人接受过编译器,我们假设x > y
执行得更快。但后来我开始怀疑编译器是否会最终优化x - y > 0
(实际上,因为我们讨论的是Python代码,解释器)。
我的理解是,由于额外的算术步骤,未经优化的x - y > 0
计算时间比x > y
要长,但我想这两个表达式在功能上是等价的。
答案 0 :(得分:0)
在决定是否将x - y > 0
翻译为x > y
时,需要考虑许多因素。首先,x > y
不一定比x - y > 0
快。在许多处理器体系结构x > y
中,通过计算x - y
并检查处理器状态标志来实现,即x > y
和x - y > 0
同样快。其次,为了能够执行转换,前后的表达式必须是等价的,并且根据关于过流和欠流的语义,这两个表达式不一定是这种情况。
例如在C中,转换对签名类型有效,因为签名表达式的过度和不足流被认为是未定义的行为,即如果它发生则整个程序存在缺陷并且任何事情都会发生。这意味着对于所有有效程序,表达式是等效的,并且可以应用转换。对于无符号类型,一方面,所有尝试都包含在该类型的域中。这意味着x - y > 0
非常简单而x > y
不是,因此它不是有效的转换。