Dotcpp  >  编程教程  >  C语言位运算  >  C语言^按位异或运算符详解

C语言^按位异或运算符详解

点击打开在线编译器,边学边练

^表示按位异或运算符,顾名思义,相异,即不同则为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


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



本文固定URL:https://www.dotcpp.com/course/606

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

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

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

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

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

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

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

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

C语言教程
第一章 C语言的过去与未来
第二章 C语言快速入门
第三章 C语言的数据类型
第四章 C语言中的基本输入输出
第五章 C语言运算符和表达式
第六章 C语句和程序流
第七章 C语言函数
第八章 C语言数组
第九章 C语言指针
第十章 C语言结构体和共用体
第十一章 C语言文件操作
第十二章 C语言预处理
第十三章 C语言位运算
第十四章 附录
Dotcpp在线编译      (登录可减少运行等待时间)