交换两个整形变量的值(异或运算符^)
在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
}
这样则可以达到交换两个数的目的,而且也不用担心超出整形变量的范围了
小弟刚刚开始学习,如有不足或者是错误的地方,希望大佬们指出。