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