为什么能用位运算来交换数据
来源:互联网 发布:杭州人工智能培训 编辑:程序博客网 时间:2024/04/30 15:12
我们知道,用位运算能交换整型数据。这是实现代码。(注:下面的^都代表是异或而非乘方)
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,达到了交换的效果
- 为什么能用位运算来交换数据
- Java--位运算;两数据交换
- 位运算的异或来交换变量
- 交换 位运算
- 数据位交换
- 数据高低位交换
- vijos_高低位交换_位运算
- 位运算-加法运算、交换两个数值
- 为什么能用神经网络来执行MNIST识别?
- 两个数间的交换(按位操作不用中间变量temp即可实现两个数据的交换)C++按位与运算交换数据vs2013环境
- 栈来实现队列,不借用第三变量交换数据,数值移位运算
- 如何用位运算符(~)和数据运算符(-)来计算表示n + 1和n
- 只使用位运算,交换两个数
- 位运算之交换高位低位
- 位运算实现两个值交换(swap)
- 只用位运算交换两个数
- 通过位运算交换a 和 b
- 位运算之两个变量的交换
- 高性能Web服务器Nginx的配置与部署研究(14)平滑升级你的Nginx
- 利用循环将循环变量 i 的值赋值给数组
- 黑马程序员-.net学习基础加强
- 嵌入式Linux学习1---虚拟机ping不通win7宿主机
- 旋转矩阵和角速度的一些应用
- 为什么能用位运算来交换数据
- 跨平台wxWidgets在windows及linux上的开发环境搭建
- 返回引用类型需要注意的东东
- heap stack 堆栈 全局变量 静态变量 进程空间 内存分配
- ——工欲善其事必先利其器
- Socket.setSoTimeout()方法的使用
- pureMVC与设计模式之一. 结构与工作流
- 1197. Hotel (dp,字符串模糊匹配)
- 高性能Web服务器Nginx的配置与部署研究(15)Upstream负载均衡模块