为什么能用位运算来交换数据
2012-03-18 18:27
232 查看
我们知道,用位运算能交换整型数据。这是实现代码。(注:下面的^都代表是异或而非乘方)
我们首先要知道三件事:
1 . a^b=b^a
证明过程很简单。因为0^0=0^0 0^1=1^0 1^0=0^1 1^1=1^1,又因为无论是a^b还是b^a,都是按位异或的,所以a^b=b^a
2 a^a=0
因为每一位都一样,所以是0
3. a ^ 0 = a
因为无论是0还是1与0异或都得原数,所以a ^ 0=
首先,i = i ^ j,此时i = i ^ j,j = j。
然后,j = j ^ i = j ^ i ^ j =j ^ j ^ i,因为j ^ j = 0,所以 j = i
最后 i = i ^ j = i ^ j ^ i = j ^ 0 = j
也就是说最后i = j,j = i,达到了交换的效果
int i,j; cin >> i >> j; i = i ^ j; j = j ^ i; i = i ^ j;
我们首先要知道三件事:
1 . a^b=b^a
证明过程很简单。因为0^0=0^0 0^1=1^0 1^0=0^1 1^1=1^1,又因为无论是a^b还是b^a,都是按位异或的,所以a^b=b^a
2 a^a=0
因为每一位都一样,所以是0
3. a ^ 0 = a
因为无论是0还是1与0异或都得原数,所以a ^ 0=
首先,i = i ^ j,此时i = i ^ j,j = j。
然后,j = j ^ i = j ^ i ^ j =j ^ j ^ i,因为j ^ j = 0,所以 j = i
最后 i = i ^ j = i ^ j ^ i = j ^ 0 = j
也就是说最后i = j,j = i,达到了交换的效果
相关文章推荐
- 使用异或运算对交换两个变量的数据
- 栈来实现队列,不借用第三变量交换数据,数值移位运算
- 为什么异或运算可以实现两个整数的交换,而无需借助第3个临时变量
- 计算机网络复习 主题2 :为什么因特网采用分组交换的方式进行数据交换
- 利用异或运算实现交换2个数据
- 你知道为什么计算机中的数据使用补码来表示和运算吗?
- 你知道为什么计算机中的数据使用补码来表示和运算吗?
- 为什么异或运算可以实现两个整数的交换,而无需借助第3个临时变量
- 两个数间的交换(按位操作不用中间变量temp即可实现两个数据的交换)C++按位与运算交换数据vs2013环境
- Tensor数据相关的运算及函数讲解
- Android应用层使用共享内存机制进行进程间交换数据
- MFC控件数据交换:DDX
- Android webview与js 交换JSON对象数据
- 江苏省职业健康监护平台数据交换方案 UploadEntity08症状
- 基于ARM9的汇编指令:数据传送指令,算术运算指令,比较指令和跳转指令
- javascript不同类型数据之间的运算的转换方法
- 在Unity3D里使用JSON格式通过PHP进行数据交换
- 不用中间变量实现交换数据
- 大数据为什么要选择Spark
- Python 笔记——2 数据运算