C语言^异或操作符使用

异或,缩写成xor。异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”,在C语言上是一种位操作符。


异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。故异或运算性质与加减类似,故在交换律和结合律上也成立。
运算法则:
1. a ⊕ a = 0(自己与自己相同,故为0)

2. a ⊕ b = b ⊕ a(交换律)

3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;(结合律,但本质上还是交换律)

4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.(a^b^c^d=0)

5. a ⊕ b ⊕ a = b.(可由3推出)

按位异或的几个常见用途:
c语言中使用^来表示异或运算(很多语言^表示乘方)
我们先来计算一下这个问题,5^3=?

5和3转为二进制分别为:0101 、0011,所以0101^0011=0110,换为十进制即为6。

6^3=0110^0011=0101,化为10进制即为5,也验证了上面第4条运算法则

(1) 使某些特定的位翻转

例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。

10100001^00000110 = 10100111

(2) 实现两个值的交换,而不必使用临时变量。

例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:

a = a^b;   //a=10100111

b = b^a;   //b=10100001

a = a^b;   //a=00000110
 

(3)还可以找到一组数内只出现一次的数,只需要把所有数一起做异或运算

如:1 2 3 4 5 1 2 3 4

因为1^1=0,2^2=0,3^3=0,4^4=0,5^0=5

又异或满足交换律和结合律

1^2^3^4^5^1^2^3^4=5

所以5只出现了一次

  • 17
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值