比较C中整数的结果

比较C中整数的结果,c,C,如果x和y都是int,那么x-y

如果
x
y
都是
int
,那么
x-y<0
是否总是返回与
x
相同的结果?

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

例如,
INT_MIN-1<0
是未定义的行为,而
INT_MIN<1
是已定义的(且为真)

如果没有溢出,那么两个表达式,
x-y<0
x
是相同的

因为当存在未定义的行为时,已编译的代码可以做它喜欢做的任何事情,所以如果C编译器愿意,它可以将
x-y<0
重写为
x
。如果
x
y
是无符号类型,溢出定义良好,
x-y<0
x
不等价,则情况并非如此。

正如@sgar91所说,否

例如:

X=0x8000000//这是IntMin
Y=1
x-y<0//将为false,因为x-y=0x7FFFFFFF=+Maxint

但是


如果
x-y
的结果超出有效
int
值的范围,则
xx-y<0
在您为典型32位平台设置的条件下是未定义的行为。未定义的行为是未定义的;将
x-y
定义为
INT_MAX
并将其评估为
INT_MAX
只是该代码(mis)行为的可能性之一。