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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

jk474443390

初级黑马

  • 黑马币:20

  • 帖子:12

  • 精华:0

© jk474443390 初级黑马   /  2016-11-28 19:15  /  1071 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

void swap(int &a, int &b)
{
    a=a^b;
    b=a^b;
    a=a^b;   //a=a(a)^b; ,既然a只是表示a,那么为什么a会等于a^b呢?

}
提问:
既然a只是表示a,那么为什么a会等于a^b呢?本人实在是想不通,求大神。。。

9 个回复

倒序浏览
求大神指导

点评

大神在哪儿。。  发表于 2016-11-28 19:29
回复 使用道具 举报
那不叫等于,是叫赋值,将a^b赋予a
回复 使用道具 举报
aA772807986 发表于 2016-11-28 19:32
那不叫等于,是叫赋值,将a^b赋予a

恩我说错了,对不起,大神,我的意思是到了第三部,a=a^b; 右边的a是简简单单的a,还是上面的a^b?
回复 使用道具 举报
aA772807986 发表于 2016-11-28 19:32
那不叫等于,是叫赋值,将a^b赋予a

恩我说错了,对不起,大神,我的意思是到了第三部,a=a^b; 右边的a是简简单单的a,还是上面的a^b?
回复 使用道具 举报
jk474443390 发表于 2016-11-28 19:40
恩我说错了,对不起,大神,我的意思是到了第三部,a=a^b; 右边的a是简简单单的a,还是上面的a^b? ...

此时的a是a^b
回复 使用道具 举报

太感谢大神了,感谢感谢!
回复 使用道具 举报
ly610 初级黑马 2016-11-28 20:03:28
8#
^是位运算符,代表异或的关系(在同一位上相同为0,不同为1)
上边的这个方法是实现的功能是交换
比如a的值为3,b的值为1
对应的二进制值a=11,b=01
第一步a=10,b=01,
第二步a=10,b=11,
第三步a=01,b=11,
从而实现了两个数的交换
回复 使用道具 举报

你可以这看
a = a ^ b
b = a ^ b      其实就是b =a ^b ^b  (一个数被异或两次就是其本身,所以这里等于a被b异或了两次,所以这还是a,被赋值给了b)
a = a ^ b     所以这里就是 a = a ^ a ^ b   b被异或了两次  所以还是b  被赋值给了a  

差不多就是这样

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马