^表示按位异或运算符,顾名思义,相异,即不同则为1,反之为0。


例如15和16进行异或运算,运算过程如下:

15 0000 0000  0000 0000  0000 0000  0000 1111
16 0000 0000  0000 0000  0000 0000  0001 0000
^ ------------------------------------------
   0000 0000  0000 0000  0000 0000  0001 1111


可以看到,经过按位异或运算后,其结果变成十进制应为31,大家务必弄清楚运算过程,然后再上机验证,代码如下:

#include<stdio.h>
int main()
{
	int a;
	a=15^16;
	printf("a=%d\n",a);
	return 0;
}


运算结果如下:

a=31


异或运算符的作用:

1. 指定位数的翻转:

如想对某个数字的低4位进行翻转,则可以将这个数字与15(二进制为00001111)进行按位异或运算,既可以将原数字的低四位进行翻转,即高四位不变,低四位0变1,1变0。

2. 与0异或还是原值:

大家可以自行实验,一个数字与0进行异或,结果还是原值。

3. 交换两个数字:

除了之前我们学习交换两个数字需要第三个变量做中介之外,如今可以通过异或运算进行,代码如下:

#include<stdio.h>
int swap(int *a,int *b)
{
    if (*a!=*b)
	{
        *a=*a^*b;
        *b=*b^*a;
        *a=*a^*b;
    }
	return 0;
}
int main()
{
	int a=5;
	int b=5;
	swap(&a,&b);
	printf("a=%d b=%d\n",a,b);
	return 0;
}


可以看到原先a为3,b为5,运行后得出:

a=5 b=5


请大家阅读代码理解并上机试验。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)