A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 枫儿 金牌黑马   /  2013-6-30 00:46  /  2366 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

各位谁给小弟解释一下那个 异或 把变量里面的两个值互换,那一节听了几遍没太听明白  ,谁给说说???

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

14 个回复

倒序浏览
int a;
a^b^b==a//true...

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

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
万琪 发表于 2013-6-30 00:52
int a;
a^b^b==a//true...

这个是  一个被异或数 异或两次后 会变成原来的被异或数!我是问那个用异或来去把两个变量值怎么交换,谢谢!!!
回复 使用道具 举报
秩宇 来自手机 中级黑马 2013-6-30 08:05:52
板凳
设a=1 b=0   
b=a^b 此时因为a b值不同 所以 a=1 b=1  
a=a^b 此时 因为a b值相同 所以a=0 b=1
完成互换  

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
其实已经有人问了这个问题

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

152150ym9we1m2crb666zo.png

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
看图片,,,,,,,,,

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

未命名.JPG

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
枫儿 金牌黑马 2013-6-30 11:38:10
7#
谢谢各位 我现在是这样理解
   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

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
tpsu88 中级黑马 2013-6-30 12:22:15
8#
x = x ^ y;
y = x ^ y;   (x ^ y) ^y;  把上面的x等式右边传下来,y和y抵掉 y=x了
x = x ^ y;    x ^ (x ^ y);  同理,x=y
记住,一个数异或同一个数两次,结果还是那个数。
希望能有所帮助!!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
先举个例子;
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;

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
王涵晴 发表于 2013-6-30 15:26
先举个例子;
int a=6  b=12
6的二进制:0110;

谢谢,学习了!!!
回复 使用道具 举报
uuom 来自手机 中级黑马 2013-6-30 18:41:01
11#
王涵晴 发表于 2013-6-30 15:26  先举个例子;  int a=6 b=12  6的二进制:0110;

支持。分析的很不错。哈哈 学习了
回复 使用道具 举报
枫儿 发表于 2013-6-30 17:27
谢谢,学习了!!!

一起努力,嘿嘿、
回复 使用道具 举报
uuom 发表于 2013-6-30 18:41
支持。分析的很不错。哈哈 学习了

{:3_57:}  好好学习、
回复 使用道具 举报
王涵晴 发表于 2013-6-30 22:17
一起努力,嘿嘿、

嗯嗯,可以加你QQ吗?我的QQ是2638623441以后方便讨教!
回复 使用道具 举报
万琪 发表于 2013-6-30 00:52
int a;
a^b^b==a//true...

好像是可以用来加密
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马