通过异或交换值
来源:互联网 发布:淘宝客选什么推广 编辑:程序博客网 时间:2024/06/06 08:52
用法:
void swap(int &a,int &b)
{
}
通用一点的形式是:
即只要直到a,b,c中的任意两个,通过异或运算就可以算出另一个。
(这是磁盘位的恢复的一种手段。)
原理如下(摘录):
^ 是按位异或操作符。两数相同的话异或的结果就是 0,否则是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:
a = 0101
b = 1100
c = 1001
有两个定理:
任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)
因为 c 中是 1 的部分表示 a 和 b 中按位不同的位,0 表示 a 和 b 中按位相同的位,那么 a 同 c 异或的结果就是 a 中与 b 不同的位发生变化,二进制数每位只有两种状态,所以 a 变成了 b:
a = 0101
c = 1001
b = 1100
同样, b 与 c 异或结果就变成了 a:
b = 1100
c = 1001
a = 0101
- 通过异或交换值
- 通过异或运算交换两个整数的值
- 通过异或操作交换两数的值
- 通过异或交换数据内容。
- 通过异或交换变量的数值
- 异或交换元素值
- 关于通过异或交换两个元素的值的一个陷阱
- Java数值交换(通过异或^来完成)
- 通过异或^交换指针所指数据出现的问题
- 使用异或交换指针的值
- 两个变量异或法交换值
- Java中用异或交换值
- 异或交换解析
- 异或交换数值
- 异或交换与数组交换
- 通过异或来实现2个数的交换(不需要中间变量)
- 异或交换变量内容
- 用异或交换数
- XP 下比较有用的快捷键
- 从需求出发来看关系模型与非关系模型–时代的变革1
- windows下安装和使用memcached
- 面试题13:在O(1)时间删除链表结点
- Tomcat源码分析(四)------ Request和Response处理的全过程 .
- 通过异或交换值
- Java中Exception的种类
- temp
- 解析spring schedule 任务调度
- 表驱动法(决策表、查询表)介绍
- a href 中调用js的几种方法
- 软件度量知识点
- java集合框架-----知识内容详解
- jad clipse在 eclipse4.2的安装生效