【发布时间】:2011-04-20 04:26:11
【问题描述】:
int x=1;
int y=2;
x ^= y ^= x ^= y;
我希望交换值。但它给出了 x=0 和 y=1。 当我用 C 语言尝试时,它给出了正确的结果。
【问题讨论】:
-
这是 C 中未定义的行为,因为您在一个序列点中同时修改 x 和 y 两次。
-
不要使用它。使用额外的临时变量来交换 2 效率更高,因为它不必进行计算。
-
表达式
x ^= y ^= x ^= y;的行为是undefined in C。 -
IMre L:你完全错了。仅仅因为“计算”对我们人类来说需要更长的时间,没有理由假设它比计算机上的评估需要更长的时间。事实上,我敢打赌两者都需要同样长的时间。 XOR 是 CPU 能做的最简单的操作。
-
“正确”的措辞不正确。
标签: java swap undefined-behavior xor