基于异或(^)运算进行数值交换的可行性分析
来源:互联网 发布:数据接口系统开发方案 编辑:程序博客网 时间:2024/05/16 14:10
基于异或运算可以不用牺牲空间就完成两个变量数值交换的操作。而在编程实践中一般都会用到第三空间来保存变量,使变量在交换过程中不至于数值改变,在此统称之为信息丢失。
为什么异或运算可以不借用第三空间但不造成信息丢失呢?
这里涉及到异或运算的一个良好性质,在表述这个性质之前我们先看一个几何上的例子。
设现有二维空间中两向量A,B。为表示方便令A为X轴正方向上的向量,B为Y轴正方向上的向量。现在我们可以利用A,B两向量的向量运算很容易就得到第三个向量C,即C = A + B;这里的向量C显然是位于第一象限中的向量。至此存在三个向量,ABC,而如果ABC中任一向量信息的丢失,则可以通过另两向量进行还原。现在你应该这个例子中所透露出来的性质。
这里的异或运算同样也是跟上述例子一样。
即C=A^B;
A=C^B;
B=C^A;
正是异或运算这一良好的性质也成为了密码学的密码编码中一个最基本的运算。
现有明文P,密钥K,我们可以通过P,K经过一系列的运算过程(置换,变换,移位,异或运算)生成密文C。
对于置换,变换,移位这种类型的运算可以通过它们的逆运算进行还原,而异或运算亦可以通过上述性质进行还原,这就使得通过密钥K,密文C生成明文P成为可能。
即:C=P^K;
=》P=C^K;
注:在此提到的异或运算在密码学中的应用只是为了说明一下异或运算性质的应用环境,而真正的密码学中编码过程远比上述要复杂。
- 基于异或(^)运算进行数值交换的可行性分析
- 基于异或(^)运算的数值交换运算
- 异或运算进行整数交换的陷阱
- 异或交换数值
- Java笔记:位运算之异或交换数值原理
- 通过异或交换变量的数值
- 数组中用异或进行数值交换需要注意的问题
- 利用异或交换数值
- Java数值交换(通过异或^来完成)
- 利用指针或引用进行两个数值交换
- [体会]用异或交换数值
- 异或运算实现两个数的交换
- 异或运算实现两个数的交换
- 异或运算实现两个数的交换
- 异或运算实现两个数的交换
- java异或运算交换两个数的陷阱
- 异或运算实现两个数的交换
- 使用异或运算交换两个变量的危险
- select发展史
- emacs的cvs仓库源码中的小问题
- 爱上“斗地主”
- 使用 AJAX 构建应用程序
- 生成HTML静态网址 [教你如何在IIS下安装rewrite]
- 基于异或(^)运算进行数值交换的可行性分析
- 火的教训~~~谨记87年森林大火
- [FileFormat]用VB写的高速GIF、JPEG 编码/解码 程序
- 内核的配置文件备份
- 使用XSL的value-of 显示XML文档
- 软件兼职的工资指导价
- Jbuilder不会远离我们
- SOA的理念驱动整个中间件产业结构的调整
- 一个程序员的成长的六个阶段