如果x
和y
都是int
,x-y < 0
总是会返回与x < y
相同的结果吗?
答案 0 :(得分:9)
没有。如果x-y
导致上溢或下溢,则行为未定义(因为int是带符号的类型)。
例如INT_MIN - 1 < 0
是未定义的行为,而INT_MIN < 1
是定义的(和true)。
当没有溢出时,x-y < 0
和x < y
这两个表达式是相同的。
由于编译后的代码可能会在未定义的行为时执行任何操作,因此如果需要,C编译器可以将x-y < 0
重写为x < y
。如果x
和y
是无符号类型,其中溢出定义明确,且x-y < 0
和x < y
不相等,则情况并非如此。
答案 1 :(得分:0)
正如@ sgar91所说,没有。
例如:
X=0x80000000 //which is IntMin
Y=1
x-y < 0 // will be false as x-y = 0x7FFFFFFF = +Maxint
但是
x < y //will be true