看到一道很老的题,但是发现了有意思的答案

lliiqiang 2010-09-02 06:20:59
题目是:不使用中间变量交换两个in a b的值

我的同事说出了一个很精彩的答案,我先不说,大家来猜,当然如果有人的答案更精彩那更好
...全文
335 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliiqiang 2010-09-04
  • 打赏
  • 举报
回复
a=b+0*(b=a)
whcsdtc 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 lh63695853 的回复:]

这个问题是锻炼什么的?逻辑还是?
[/Quote]
这锻炼的是娱乐精神,just for fun.
xxkaishui 2010-09-03
  • 打赏
  • 举报
回复
int a = 10;
int b = 20;
a = b+((b=a)&0);
hovy_yang 2010-09-03
  • 打赏
  • 举报
回复
a=a+b;
b=a-b;
a=a-b;
lh63695853 2010-09-03
  • 打赏
  • 举报
回复
这个问题是锻炼什么的?逻辑还是?
leojing888 2010-09-03
  • 打赏
  • 举报
回复
+-的那个很经典.
凤朝凰 2010-09-03
  • 打赏
  • 举报
回复
又看到高手了
eggno8 2010-09-03
  • 打赏
  • 举报
回复
路过,每日可用分10分~
changxiaochuan 2010-09-03
  • 打赏
  • 举报
回复
学习了
HappyKeKe 2010-09-03
  • 打赏
  • 举报
回复
a = a - b;
b = b + a;
a = b - a;
showjim 2010-09-03
  • 打赏
  • 举报
回复
xchg a,b
sxdgundam 2010-09-03
  • 打赏
  • 举报
回复
坐等答案
androidmvc 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 li0306 的回复:]

a=a^b b=a^b a=a^b
[/Quote]


+1
super_thinker 2010-09-03
  • 打赏
  • 举报
回复
学习了 原来很多方法都可以 我只知道一种
simple05 2010-09-03
  • 打赏
  • 举报
回复
好像多可以啊!
zhuzeitou 2010-09-03
  • 打赏
  • 举报
回复
异或吧
a=a^b;b=a^b;a=a^b;
yangjie19880826 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wenwei19861106 的回复:]
a=a+b;
b=a-b
a=a-b;
不知道对不对
[/Quote]豁然开朗啊!!!
ycyyww 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 lliiqiang 的回复:]
题目是:不使用中间变量交换两个in a b的值

我的同事说出了一个很精彩的答案,我先不说,大家来猜,当然如果有人的答案更精彩那更好
[/Quote]这个问题很牛逼!!
ThinkCat 2010-09-03
  • 打赏
  • 举报
回复
异或,学习下
eggno8 2010-09-03
  • 打赏
  • 举报
回复
以前我一直以为异或运算的速度最快,因为只用一个机器周期,结果做了一个测试,java代码片段如下:

for (int i = 0; i < 100000000; i++) {
x1 ^= y1;
y1 ^= x1;
x1 ^= y1;
}
for (int i = 0; i < 100000000; i++) {
x2 = x2 + y2;
y2 = x2 - y2;
x2 = x2 - y2;
}
int temp = 0;
for (int i = 0; i < 100000000; i++) {
temp = y3;
y3 = x3;
x3 = temp;
}

结果
第一段异或的耗时230ms左右,第二段加减法的耗时220ms左右,第三段常规中间变量交换的耗时130ms左右。。。是java的原因还是怎么的?迷糊了
加载更多回复(18)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧