[英]Results of comparing integers in C
如果x
和y
都是int
, xy < 0
总是会返回与x < y
相同的结果吗?
否。如果xy
导致溢出或下溢,则行为未定义(因为int是带符号的类型)。
例如, INT_MIN - 1 < 0
是未定义的行为,而INT_MIN < 1
是定义的(和真)。
当没有溢出时,两个表达式xy < 0
和x < y
是相同的。
因为编译后的代码可能会在出现未定义的行为时执行任何操作,因此如果需要,C编译器可以将xy < 0
重写为x < y
。 如果x
和y
是无符号类型,其中溢出是明确定义的,并且xy < 0
且x < y
不等效,则不是这样。
正如@ sgar91所说,没有。
例如:
X=0x80000000 //which is IntMin Y=1 xy < 0 // will be false as xy = 0x7FFFFFFF = +Maxint
但
x < y //will be true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.