交换两个整形变量的值(异或运算符^)

在vs2013环境中交换两个整形变量的值

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 10, b = 20, temp = 0;
	printf("a=%d,b=%d\n", a, b);
	temp = a;
	a = b;
	b = temp;
	printf("a=%d,b=%d", a, b);
	system("pause");         //停止程序,否则在vs2013及以上版本中无法看到结果
	return 0;
}

上面是最基本的交换两个整形变量的值的方法,添加一个中间变量,来进行交换。

而若不添加中间变量来进行两个整形变量的交换,可以使用两个变量间的关系来进行加减,得到交换的目的。
如上面代码中 a = 10 , b = 20 则可以使用 a = a+b , b = a-b ,a = a-b ,这样也可以达到效果。

但这种方法的缺陷还是很大的,如果数字过于大,则会超出 int 型变量 的范围,所以我们使用 异或运算符“^” ,来达到交换的目的。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = 10, b = 20;
	    printf("a = %d,b=%d\n",a, b);
	    a = a^b;                                      // ^为二进制异或运算符"相同为0,相异为1"
		b = a^b;                                      // 10的二进制为  1010 -a
		a = a^b;                                      // 20的二进制为 10100 -b
		printf("a = %d,b=%d\n", a, b);                // a = a^b   为 11110    a,b中谁与这个值异或则出现另一个数
		system("pause");                              // b = a^b   为 01010   -10
 		return 0;                                     // a = a^b   为 10100   -20

}

交换两个整形变量的值(异或运算符^)
这样则可以达到交换两个数的目的,而且也不用担心超出整形变量的范围了

小弟刚刚开始学习,如有不足或者是错误的地方,希望大佬们指出。