0
点赞
收藏
分享

微信扫一扫

在不创建第三个变量的情况下交换两个变量的值

1.加减法

int main() {
	int a = 3;
	int b = 5;
	a = a + b; //a=8
	b = a - b; //b=8-5=3
	a = a - b; //a=8-3=5
	printf("a=%d,b=%d",a, b);
	return 0;
}

缺点:int型占4字节,若a,b较大但都恰好占4字节,而它们的和超出4个字节,二进制数据会进位丢失,此时加减法不再适用。

2.异或法

int main() {
	int a = 3; //00000000 00000000 00000000 00000011
	int b = 5; //00000000 00000000 00000000 00000101
	a = a^b;   //00000000 00000000 00000000 00000110  创建密码
	b = a^b;   //00000000 00000000 00000000 00000011
	a = a^b;   //00000000 00000000 00000000 00000101
	printf("a=%d,b=%d",a, b);
	return 0;
}

先用a^b相当于先创建一个密码来存储a与b的对应二进制位是否相同的信息,1代表不同,0代表相同

根据异或的性质x^1=!x ;  x^0=x

把b异或此密码就能得到a,得到a后再异或此密码就能把b的值赋给a,实现a与b的交换

举报

相关推荐

0 条评论