^按位异或运算符

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

^表示按位异或运算符,顾名思义,相异,即不同则为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语言的过去与未来
第二章 C语言快速入门
第三章 C语言的数据类型
第四章 C语言中的基本输入输出
第五章 运算符和表达式
第六章 C语句和程序流
第七章 函数
第八章 数组
第九章 指针
第十章 复合结构
第十一章 文件操作
第十二章 预处理
第十三章 位运算
Dotcpp在线编译      (登录可减少运行等待时间)