求助,用异或运算交换两个变量的值

为什么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