目录

利用异或 ^ 来交换两个数的值,而且不引入其他变量的方法

目录

通常我们交换一个数字,需要引入第三个变量来储存才能进行交换,但利用异或运算可以不需要第三个变量作为中间量。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include "stdio.h"
int a = 1;
int b = 2; 
int t;
int main(viod){
	printf("a=%d,b=%d\n",a,b);
	t = a;
	a = b;
	b = t;
	printf("a=%d,b=%d\n",a,b);
}

结果输出:

1
2
a=1,b=2
a=2,b=1

如果用异或来进行交换:

1
2
3
4
5
unsigned int a=60;  //0011 1100
unsigned int b=13;  //0000 1101
a=a^b;              //a=a^b=0011 0001
b=a^b;              //b=a^b=0011 1100  相当于b1=(a^b)^b
a=a^b;              //a=a^b=0000 1101  相当于a1=(a^b)^((a^b)^b)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include<stdio.h>

int main( )
{
    unsigned int a=60;         //0011 1100
    unsigned int b=13;         //0000 1101
    printf("a=%d,b=%d",a,b);   //输出a,b的值
    printf("\n");
    a=a^b;                     //a=a^b=0011 0001
    b=a^b;                     //b=a^b=0011 1100
    a=a^b;                     //a=a^b=0000 1101
    printf("a=%d,b=%d",a,b);   //输出a,b的值
}

结果输出:

1
2
a=60,b=13
a=13,b=60

整型负数也可交换

注意:位运算只支持整数运算,不支持浮点型运算。因此上述的方法用在浮点型运算编译不会通过。


参考资料

程序设计入门–C翁恺

c语言程序设计》–谭浩强

《C Primer Plus》–Stephen Prata

C语言中文网

C语言教程|菜鸟教程