gpt4 book ai didi

java - 为什么这条语句在java中不起作用 x ^= y ^= x ^= y;

转载 作者:太空狗 更新时间:2023-10-29 22:58:52 24 4
gpt4 key购买 nike

int x=1;
int y=2;
x ^= y ^= x ^= y;

我希望交换值。但它给出 x=0 和 y=1。当我尝试使用 C 语言时,它给出了正确的结果。

最佳答案

你的陈述大致等同于这个扩展形式:

x = x ^ (y = y ^ (x = x ^ y));

与 C 不同,在 Java 中,二元运算符的左操作数保证在右操作数之前求值。评估发生如下:

x = x ^ (y = y ^ (x = x ^ y))
x = 1 ^ (y = 2 ^ (x = 1 ^ 2))
x = 1 ^ (y = 2 ^ (x = 3))
x = 1 ^ (y = 2 ^ 3) // x is set to 3
x = 1 ^ (y = 1)
x = 1 ^ 1 // y is set to 1
x = 0 // x is set to 0

您可以颠倒每个 xor 表达式的参数顺序,以便在再次评估变量之前完成赋值:

x = (y = (x = x ^ y) ^ y) ^ x
x = (y = (x = 1 ^ 2) ^ y) ^ x
x = (y = (x = 3) ^ y) ^ x
x = (y = 3 ^ y) ^ x // x is set to 3
x = (y = 3 ^ 2) ^ x
x = (y = 1) ^ x
x = 1 ^ x // y is set to 1
x = 1 ^ 3
x = 2 // x is set to 2

这是一个更紧凑的版本,也可以工作:

x = (y ^= x ^= y) ^ x;

但这是交换两个变量的真正可怕的方式。使用临时变量是一个更好的主意。

关于java - 为什么这条语句在java中不起作用 x ^= y ^= x ^= y;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com