^表示按位异或运算符,顾名思义,相异,即不同则为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
请大家阅读代码理解并上机试验。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程