这个问题怎么办?

小_Y 2010-04-21 05:58:07
在java中给定2个变量。
如何替换这两个变量的值。(不能用其他的变量)
...全文
193 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
hepeng_8 2010-04-23
  • 打赏
  • 举报
回复
如果是char或者整型的话
int i=1,j=2;
i^=j;
j^=i;
i^=j;
这样i=2,j=1

是不是这样啊
丸总 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 keeya0416 的回复:]
引用 16 楼 luxing44530 的回复:
引用 3 楼 zfq642773391 的回复:
如果是char或者整型的话
int i=1,j=2;
i^=j;
j^=i;
i^=j;
这样i=2,j=1

能具体讲解下么?
谢谢。

这里利用了一个数和自己异或为0,和0异或为自己的特点。
像楼上也有先加后减的,但不建议用
因为那样有可能有溢出的危险
而 异或目前……
[/Quote]


学习了。。。。
zfq642773391 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 keeya0416 的回复:]
引用 16 楼 luxing44530 的回复:
引用 3 楼 zfq642773391 的回复:
如果是char或者整型的话
int i=1,j=2;
i^=j;
j^=i;
i^=j;
这样i=2,j=1

能具体讲解下么?
谢谢。

这里利用了一个数和自己异或为0,和0异或为自己的特点。
像楼上也有先加后减的,但不建议用
因为那样有可能有溢出的危险
而 异或目前……
[/Quote]
顶 厉害啊
ForestDB 2010-04-21
  • 打赏
  • 举报
回复
果然做Java的懂byte和bit的就少了。
zuoguodang 2010-04-21
  • 打赏
  • 举报
回复
比较好理解的是a=a+b;b=a-b;a=a-b;
keeya0416 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 luxing44530 的回复:]
引用 3 楼 zfq642773391 的回复:
如果是char或者整型的话
int i=1,j=2;
i^=j;
j^=i;
i^=j;
这样i=2,j=1

能具体讲解下么?
谢谢。
[/Quote]
这里利用了一个数和自己异或为0,和0异或为自己的特点。
像楼上也有先加后减的,但不建议用
因为那样有可能有溢出的危险
而 异或目前来说是效率最好 也没有什么副作用的方法。

i^=j; ---> i = i ^ j;
j^=i; ---> j = (i ^ j) ^ j = i ^ 0 = i;
i^=j; ---> i = (i ^ j) ^ i = j;

这里先利用了变量i把i ^ j 给存起来了,间接的存下了2个变量的值。
利用后边的异或把2个值再给分离出来
cwjieNo1 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 huadieliuxiang 的回复:]
a=b b=c c=a
[/Quote]
哥们,不使用第三方变量来实现,你这个使用了第三个变量 C
huadieliuxiang 2010-04-21
  • 打赏
  • 举报
回复
a=b b=c c=a
欢乐极客 2010-04-21
  • 打赏
  • 举报
回复
如果不是基本类型的话,写个工具类
欢乐极客 2010-04-21
  • 打赏
  • 举报
回复


a = a + b;
b = a - b;
a = a - b;





a = b + 0 * (b = a);





a = a ^ b;
b = a ^ b;
a = a ^ b;



方法多得很
wensefu 2010-04-21
  • 打赏
  • 举报
回复
很经典的问题了。。。位运算和加减变换只对整型和char型有用。
TillPerfect 2010-04-21
  • 打赏
  • 举报
回复
回复16楼:
int i = 5; int j = 3;
(1)i^=j; --> i = 5^3;
(2)j^=i; --> j = 3^i = 3^(5^3) = 3^3^5;
(3)i^=j; --> i = i^j = (5^3)^5 = 5^5^3;

仔细分析,会发现,其实运算过程中,使用了一个数 3^5 做为中间变量
慢慢看,有意思,O(∩_∩)O~
zfq642773391 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 luxing44530 的回复:]
引用 3 楼 zfq642773391 的回复:
如果是char或者整型的话
int i=1,j=2;
i^=j;
j^=i;
i^=j;
这样i=2,j=1

能具体讲解下么?
谢谢。
[/Quote]
^是异或运算符 0^0=0,0^1=1,1^1=0,就是俩个位不等结果就为1
i^=j;
j^=i;
i^=j;
至于这样算为什么能交换俩个数,好像是个数学上结论,我也不是太清楚
小_Y 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zfq642773391 的回复:]
如果是char或者整型的话
int i=1,j=2;
i^=j;
j^=i;
i^=j;
这样i=2,j=1
[/Quote]
能具体讲解下么?
谢谢。
24K純帥 2010-04-21
  • 打赏
  • 举报
回复
a=a+b;
b=a-b;
a=a-b;
gaoxiang519 2010-04-21
  • 打赏
  • 举报
回复
数值的话就用11楼的方法,加了后再减。
CreazyJava 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lulu0126 的回复:]

Java code


int a=3 ,int b=4;

a=a+b;
b=a-b;
a=a-b;
[/Quote]

这个方法也很好
Mars_Ma_OK 2010-04-21
  • 打赏
  • 举报
回复
顶起。。
lulu0126 2010-04-21
  • 打赏
  • 举报
回复


int a=3 ,int b=4;

a=a+b;
b=a-b;
a=a-b;


wyang1991 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luomf 的回复:]
引用 3 楼 zfq642773391 的回复:
如果是char或者整型的话
int i=1,j=2;
i^=j;
j^=i;
i^=j;
这样i=2,j=1


不错,这种方法效率最高
[/Quote]

谭浩强的c语言的书里面就有这个例子!
加载更多回复(9)

62,584

社区成员

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

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