基于异或(^)运算进行数值交换的可行性分析

原创 2006年05月29日 22:52:00

基于异或运算可以不用牺牲空间就完成两个变量数值交换的操作。而在编程实践中一般都会用到第三空间来保存变量,使变量在交换过程中不至于数值改变,在此统称之为信息丢失。

为什么异或运算可以不借用第三空间但不造成信息丢失呢?

这里涉及到异或运算的一个良好性质,在表述这个性质之前我们先看一个几何上的例子。

设现有二维空间中两向量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中,由于JVM机制的存在,使得位运算存在感更加低,并且,为了程序的可读性,也有程序员不愿意使用位运算进行操作...
  • Vlicet
  • Vlicet
  • 2017年06月05日 21:59
  • 208

异或操作实现两数值交换和其中的bug

· 异或操作           在进行两个数值交换的时候一般有两个选择: 1) 中间变量 ;  2) 坐标系 。除此之外,还可以使用异或操作         异或操作的原理是将两个数由十进制...
  • qq869348527
  • qq869348527
  • 2016年08月10日 15:53
  • 644

基于异或(^)运算的数值交换运算

设现在有两个变量A和B要求不通过第三空间完成变量A和B的数值交换首先讨论一下基于第三空间的数值交换方法int tmp;tmp = A;A = B;B = tmp;现在我们讨论不通过第三空间的数值交换方...
  • jingmingblog
  • jingmingblog
  • 2006年05月29日 11:34
  • 533

用异或来交换两个变量是错误的

用异或来交换变量是错误的 陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice 翻转一个字符串,例如把 "12345" 变成 "54321",这是一个最简单的不过...
  • Solstice
  • Solstice
  • 2010年01月09日 22:43
  • 32028

关于利用异或操作来交换两个数值的方法

void inplace_swap (int *x, int *y) { *x = *x ^ *y;  //step 1 *y = *x ^ *y;  //step 2 *x = *x ^ *y;  ...
  • qq_20125305
  • qq_20125305
  • 2014年11月16日 21:45
  • 245

用异或来交换两个变量更耗时

FROM:陈硕 http://blog.csdn.net/solstice/article/details/5166912  翻转一个字符串,例如把 "12345" 变成 "54321",这是一个最简...
  • hermito
  • hermito
  • 2016年04月18日 19:15
  • 288

使用异或交换指针的值

#include #include void inplace_swap(int *x, int *y) { *y = *x ^ *y; *x = *x ^ *y; *y ...
  • Kevin_Samuel
  • Kevin_Samuel
  • 2015年07月03日 00:45
  • 1033

位运算-加法运算、交换两个数值

前面的引言部分是写在前面的胡说八道,了解题目的话可以直接跳过此部分查看正文。引言这个问题的来源是http://www.lintcode.com/上的编号第一的面试题目,涉及到二进制位运算,很有意思。并...
  • surp2011
  • surp2011
  • 2016年04月14日 10:52
  • 1522

"异或"实现a和b两变量交换

今天在看C语言的位运算时,看到了如下交换a,b两值的方法:                     a = a^b;                     b = a^b;          ...
  • dx01259
  • dx01259
  • 2015年07月22日 21:34
  • 600

异或来交换数原理

用按位 异或来交换数原理是什么比如, int x=7,y=8; x=x^y; y=y^x; x=x^y; 结果x=8,y=7; 哈哈,你写的例子就是利用异或的方法将两个数交换,就如同:int x=7,...
  • lambyuyu
  • lambyuyu
  • 2010年04月29日 17:03
  • 4779
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于异或(^)运算进行数值交换的可行性分析
举报原因:
原因补充:

(最多只允许输入30个字)