-3

在 C++ 中,当比较两个整数值是否相等时,以下语句是否相同?如果不是,为什么?

if(a == b)
  ...do

if(!(a ^ b))
  ...do
4

2 回答 2

4

对于整数值,是的。显然,xor如果 A 和 B 之间存在任何位差异,则运算符将返回非零值,!并将其反转。对于整数数据类型,条件是等价的。

对于浮点值,由于您如何执行两个“应该”给出相同结果的数学运算,但它们可能以不同的方式表示为浮点数,您不应该使用其中任何一个来比较浮点数是否相等,您应该检查它们是否在很小的误差范围内(“epsilon”)是相同的。

对于指针...我不知道您为什么要对指针执行此操作。但是,如果您真的想这样做,那么是的,它们是相同的。

但是,没有理由这样做。启用优化后,它们将编译为相同的代码,如果没有,第一个可能会更快。为什么要使用 less-clear !(a^b)

于 2013-09-18T13:37:18.290 回答
3

这两个比较是等价的:当且仅当a^b是,当且仅当 a 和 b 具有相同的值时也是。0a==b!(a^b)true

是否可以称它们为“相同”取决于两个不同的操作“相同”的含义。它们可能不会被编译成相同的代码,而且a==b肯定更容易阅读。

于 2013-09-18T13:37:13.063 回答