使用异或交换数据值的原理
来源:互联网 发布:网络鲜花礼品网 编辑:程序博客网 时间:2024/05/17 06:02
c
大家都知道,假如有a,b两个整型数,我们可以用
a^=b;
b^=a;
a^=b;
来交换a,b的值,在这里我说说其中的原理:
^ 在 C 里面是按位异或操作符,相同的话异或的结果就是 0,不同的话就是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:
a = 0101 (5 的二进制表示)
b = 1100 (12 的二进制表示)
----
c = 1001 (结果为 9)
b = 1100 (12 的二进制表示)
----
c = 1001 (结果为 9)
可以看出 c 中是 1 的部分就是 a 和 b 二进制表示对应位不同的部分,0 则是相同的部分。
牢记以下两条原则:
任何一位二进制数同 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异或交换两个整数或字符串原理
- 通过异或交换数据内容。
- 利用异或方法实现数据交换
- 萧亚轩 突然想起你
- OpenStack简介
- smarty里面如何调用自定义函数
- ubuntu 11.10下的vim安装以及配置
- Python中的异常处理
- 使用异或交换数据值的原理
- oracle分析函数应用
- 低版本的android系统如何使用ActionBar
- C++中的格式控制
- 爱,有你才完整-----by 魏晨
- {linux程序}之网络程序的并发之路
- 光线补足 直方图均衡化 弧形灰度拉伸
- 泪光翅膀----by蓝正龙
- /GS(缓冲区安全检查)浅析