在C中比较整数的结果

tea*_*eef 2 c

如果x和y都int将x-y < 0始终返回相同的结果x < y?

Pau*_*kin 9

否.如果x-y导致溢出或下溢,则行为未定义(因为int是带符号的类型).

例如INT_MIN - 1 < 0,未定义的行为,而INT_MIN < 1定义(和真).

当没有溢出,那么两个表达式,x-y < 0并且x < y是相同的.

因为编译后的代码可能会在出现未定义的行为时执行任何操作,因此允许C编译器重写x-y < 0,x < y就像它希望的那样.如果x且y是无符号类型,则溢出是明确定义的,并且不等效x-y < 0,x < y则不是这样.