为什么c和java的运行结果不同?
public static void main(String[] args) {
int a = 8, b = 4;
a ^= b ^= a ^= b;
System.out.printf("%d, %d", a, b);
}
// 运行结果 : 0, 8
int main()
{
int a = 8, b = 4;
a ^= b ^= a ^= b;
printf("%d, %d", a, b);
return 0;
}
// 运行结果 : 4, 8
Java中x^= y^= x^= y的实际行为
int tmp1 = x ; // x在表达式中第一次出现
int tmp2 = y ; // y的第一次出现
int tmp3 = x ^ y ; // 计算x ^ y
x = tmp3 ; // 最后一个赋值:存储x ^ y 到 x
y = tmp2 ^ tmp3 ; // 第二个赋值:存储最初的x值到y中
x = tmp1 ^ y ; // 第一个赋值:存储0到x中
从上面的代码可以看出,其实a之所以会为0,是因为a^a造成的,我们知道,两个相同的值异或其值为0.
请参考这篇文章,有详细说明https://blog.csdn.net/Skylv111/article/details/25164673
因为int 在C和C++的占用2个字节,在java中4个字节
您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~
ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓
【电脑端】戳>>> https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】 戳>>> https://mall.csdn.net/item/52471?utm_source=1146287632