在比较两个整数值时,C ++中的以下语句是否相同?如果没有,为什么?
if(a == b)
...do
if(!(a ^ b))
...do
答案 0 :(得分:4)
对于整数值,是的。显然,如果A和B之间存在任何位差异,xor
运算符将返回非零,并且!
将反转该值。对于整数数据类型,条件是等效的。
对于浮点值,由于你可以执行两个“应该”给出相同结果的数学运算,但它们可以用不同的方式表示为浮点数,你不应该使用其中任何一个来比较浮点数是否相等,你应该检查它们是否在相同的误差范围内(“epsilon”)。
指点......我不知道你为什么要这么做指针。但如果你真的想这样做,那么是的,它们是一样的。
但是,没有理由这样做。启用优化后,它们将编译为相同的代码,而第一个代码可能会更快。为什么要使用不太清晰的!(a^b)
?
答案 1 :(得分:3)
两次比较是等效的:a^b
0
当且仅当a==b
时,!(a^b)
为true
当且仅当a和b有相同的价值。
你是否可以称它们为“相同”取决于两个不同的操作是“相同”的意思。它们可能不会被编译成相同的代码,a==b
肯定更容易阅读。