给大家分享一句我很喜欢我话:
知不足而奋进,望远山而前行!!!
铁铁们,成功的路上必然是孤独且艰难的,但是我们不可以放弃,远山就在前方,但我们能力仍然不足,所有我们更要奋进前行!!!
今天我们更新了C语言中的异或运算内容,
欢迎大家关注点赞收藏⭐️留言
前言:
先前的文章中我已经写过关于一些基本的算术操作符的使用,这次我们来介绍一下先前没有介绍的一个操作符,叫做异或操作符(^)。
一、异或操作符的基本介绍
C 语言中的异或操作符是^
,表示按位异或运算。异或操作是一种逻辑运算,针对两个值的对应位进行比较,如果相应位相同则结果为 0,不同则结果为 1。具体来说,对于两个操作数 A 和 B,A ^ B 的结果是将 A 和 B 每个对应的位进行异或操作得到的值。
例如,对于十进制数 5 和 3,其对应的二进制表示分别为 101 和 011,进行异或操作后得到的结果为 110,即十进制的 6。
简单的来说就是:两个数的二进制中的补码相同则为0,不同则为1,进而来改变这个数的值。
二、异或操作符的基本作用
- 相同位为 0,不同位为 1:如果两个操作数的对应位相同,则异或结果为 0;如果对应位不同,则异或结果为 1。
- 满足交换律和结合律:异或操作符满足交换律和结合律,即 a ^ b 等价于 b ^ a,(a ^ b) ^ c 等价于 a ^ (b ^ c)。
- 自身与自身异或结果为 0:任何数与自身进行异或操作的结果为 0,即 a ^ a = 0。
- 异或操作的逆运算是自身:某个数与另一个数进行两次异或操作可以得到原始的数,即 a ^ b ^ b = a。这是因为异或是一种无进位相加的操作。
- 异或操作可用于交换两个数的值:通过异或操作可以在不使用临时变量的情况下交换两个变量的值。例如,a ^= b; b ^= a; a ^= b; 可以交换变量 a 和 b 的值。
下面我们来句一个例子继续加深我们对他的理解:
在前几年的某个大厂的面试中,曾出过这样的一道题:给定两个值a和b,交换这两数的值,但是不能创建第三个临时变量,当时很多面试者看到这个题都是一头雾水,感觉我从下手,下面我们就来介绍一下这个题如何运用异或操作符使其变得简单起来。
首先我们看一个也正确但是没有运用到异或操作符的做法:
#include int main(){int a = 3, b = 5;printf("交换前:%d %d\n", a, b);a = a + b;b = a - b;a = a - b;printf("交换后:%d %d\n", a, b);return 0;}
看一下这样写的结果,也是正确的,但是总感觉不是那么高大上,下面我们就用异或操作符来写下这个题,使其变得高大上起来。
#include int main(){ int a = 3, b = 5; printf("交换前:%d %d\n", a, b); a = a ^ b; b = a ^ b; a = a ^ b; printf("交换后:%d %d\n", a, b); return 0;}
结果仍然正确,下面我们来讲一下这是为什么?
前面我们说了,a^a=0;0^a=a;
在代码中,我们先让a^b,此时a就等于a^b,然后我们将此时的a带入到下面,此时b=a^b^b;
那么b^b就等于 0,那么此时b不就等于a了嘛。那么下面也是这个原理啊,此时的b=a^b,那么下面的a不就等于a^a^b了吗,所以a就等于b了。这就是异或操作符的原理了