用异或交换两个整数的值

一、异或(^)的定义

异或运算法则由下表所定义:

^01
001
110

可见,表是关于对称的,异或运算是满足交换律的。

二、异或的基本规律

对于一位二进制数,x(x = 0, 或x= 1)有以下规律(其中a,b,c都是一位二进制数):

a ^ a = 0

a ^ 0 = a

a ^ 1 = ~a

交换律:a ^ b = b ^ a (异或定义)

结合律:a ^ ( b ^ c) = (a ^ b) ^ c

证明:

abc(a ^ b) ^ ca ^ (b ^ c)
000000
100111
201011
301100
410011
510100
611000
711111

结合律和交换律还可以推广到n个二进制数做异或运算,就得出了一个结论:n个一位二进制数相异或,只要数这n个二进制数有多少个1,奇数个1的话,异或结果为1。偶数个1结果为0。

三、交换整数的值

a = a ^ b

b = a ^ b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a

a = a ^ b = a ^ b ^ a= a ^ a ^ b = 0 ^ b = b

解释:我们只证明了一位二进制数,对于32位整数如何成立呢?

因为32位的二进制数是由32个0或1组成的,按位异或计算是每个位算自己的,与其他的位是独立的,因此这个结论对多位二进制数也成立,包括负整数,对浮点数是不成立的,因为浮点的表示与整数表示的差别很大。

四、验证

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值