比较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)行为的可能性之一。