黑马程序员技术交流社区

标题: 异或 变量互换 [打印本页]

作者: 枫儿    时间: 2013-6-30 00:46
标题: 异或 变量互换
各位谁给小弟解释一下那个 异或 把变量里面的两个值互换,那一节听了几遍没太听明白  ,谁给说说???

作者: 万琪    时间: 2013-6-30 00:52
int a;
a^b^b==a//true...

呵呵,,位运算的吧,,后面一直没用到,,这个可以用来io流加密,,

作者: 枫儿    时间: 2013-6-30 01:03
万琪 发表于 2013-6-30 00:52
int a;
a^b^b==a//true...

这个是  一个被异或数 异或两次后 会变成原来的被异或数!我是问那个用异或来去把两个变量值怎么交换,谢谢!!!
作者: 秩宇    时间: 2013-6-30 08:05
设a=1 b=0   
b=a^b 此时因为a b值不同 所以 a=1 b=1  
a=a^b 此时 因为a b值相同 所以a=0 b=1
完成互换  
作者: 王广亚    时间: 2013-6-30 10:08
其实已经有人问了这个问题

152150ym9we1m2crb666zo.png (41.64 KB, 下载次数: 0)

152150ym9we1m2crb666zo.png

作者: beike    时间: 2013-6-30 11:03
看图片,,,,,,,,,

未命名.JPG (35.47 KB, 下载次数: 0)

未命名.JPG

作者: 枫儿    时间: 2013-6-30 11:38
谢谢各位 我现在是这样理解
   int x=3,y=2;

   x(1)=x(3) ^ y(2);

   Y(3)=x(1) ^ y(2);

   x(2)=x(1) ^ y(3);

/*这个括号是当前x或y的值*/

ppp.jpg (16.65 KB, 下载次数: 0)

ppp.jpg

作者: tpsu88    时间: 2013-6-30 12:22
x = x ^ y;
y = x ^ y;   (x ^ y) ^y;  把上面的x等式右边传下来,y和y抵掉 y=x了
x = x ^ y;    x ^ (x ^ y);  同理,x=y
记住,一个数异或同一个数两次,结果还是那个数。
希望能有所帮助!!
作者: 王涵晴    时间: 2013-6-30 15:26
先举个例子;
int a=6  b=12
6的二进制:0110;
12的二进制:1100;

   0110                 1010                           1010
^1100               ^1100                        ^0110
---------         -------------              ----------------

  1010                  0110                           1100

a=a^b;   // a=0110^b=1010
b=a^b;  // b=1010^b=0110   = 6
a=a^b;  // a=1010^b=1100   =12


原理:一个数异或同一个数两次还是它本身;
int a=6,b=12;
a=a^b;   
b=a^b;  // 把a替换成a^b,相当于b=a^b^b,这个时候b=6=a;
a=a^b;  //把a替换成a^b,b= a,相当于a=a^b^a= b^a^a =b = 12;


作者: 枫儿    时间: 2013-6-30 17:27
王涵晴 发表于 2013-6-30 15:26
先举个例子;
int a=6  b=12
6的二进制:0110;

谢谢,学习了!!!
作者: uuom    时间: 2013-6-30 18:41
王涵晴 发表于 2013-6-30 15:26  先举个例子;  int a=6 b=12  6的二进制:0110;

支持。分析的很不错。哈哈 学习了
作者: 王涵晴    时间: 2013-6-30 22:17
枫儿 发表于 2013-6-30 17:27
谢谢,学习了!!!

一起努力,嘿嘿、
作者: 王涵晴    时间: 2013-6-30 22:18
uuom 发表于 2013-6-30 18:41
支持。分析的很不错。哈哈 学习了

{:3_57:}  好好学习、
作者: 枫儿    时间: 2013-6-30 22:38
王涵晴 发表于 2013-6-30 22:17
一起努力,嘿嘿、

嗯嗯,可以加你QQ吗?我的QQ是2638623441以后方便讨教!
作者: 枫儿    时间: 2013-7-1 00:43
万琪 发表于 2013-6-30 00:52
int a;
a^b^b==a//true...

好像是可以用来加密




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2