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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© forDream 高级黑马   /  2014-1-26 15:40  /  1978 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


关于不使用第三方变量交换a,b的值方法一:
a = a + b;
b = a - b;
a = a - b;
方法二:
a = a * b;
b = a / b;
a = a / b;
方法三:
a = a ^ b;
b = a ^ b;
a = a ^ b;
哪个方法好,方法三怎么个意思

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
^是异或的意思。即有且只有一个为真时,结果为真。
回复 使用道具 举报
最后一个就是异或的意思,一般来说用第一个,简单明了,后面的只是能实现,不常用,也可以一句话进行赋值交换
y = x + (x = y) - x;  这样也可以
回复 使用道具 举报
我觉得对于两个变量的交换,只要能建立起a,b之间的映射关系都能满足进行交换,,而且不用第三变量
回复 使用道具 举报
本帖最后由 卢必新 于 2014-1-29 11:08 编辑

第三个的意思是不是:
a的a的b的平方次方次方

jieshi.jpg (30.91 KB, 下载次数: 69)

jieshi.jpg
回复 使用道具 举报
我认为, 这三个方法主要的区别在于运算效率,二级制运算的效率最高,加法次之,乘法最差。
从思想发面,方法一与方法二有异曲同工之妙,但是方法三是需要了解计算机底层才能编写出来的。
方法三是指采用二级制异或的特点:
一个数与本身异或运算得0x00000000; 0^0 = 0  1^1 = 0
一个数与0异或还是它本身  1^0 = 1; 0^0 = 0
假设a = 2 0x00000010; b = 3 0x00000011
下面为了看着方便,将每个数出现的次数作为后缀,对应地替换一下:
a = a ^ b;   a1 = a0 ^ b0  ;  
b = a ^ b;   b1 = a1 ^ b0  = a0 ^ b0 ^b0 = a0
a = a ^ b;   a2 = a1 ^ b1  = a0 ^ b0 ^a0 ^ b0 ^b0 = b0

评分

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

查看全部评分

回复 使用道具 举报 1 0
Lillian 发表于 2014-1-29 23:08
我认为, 这三个方法主要的区别在于运算效率,二级制运算的效率最高,加法次之,乘法最差。
从思想发面,方 ...

会不会产生数据乘方后值过大,然后溢出啊
回复 使用道具 举报
forDream 发表于 2014-1-31 10:13
会不会产生数据乘方后值过大,然后溢出啊

我想你说的乘方是指 ^ 这个运算符号,它这里不是幂运算,而是二进制的异或运算,因此不会产生溢出的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马