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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 zhou_411424 于 2011-11-28 14:29 编辑

要求不引用第3个变量,将x=1,y=2的值置换?怎样实现?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

11 个回复

倒序浏览
x = x^y;
y = x^y;   
x = x^y;

你测试一下,看看行不行。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有奖!

查看全部评分

回复 使用道具 举报
y=x+y;
x=y-x;
y=y-x;

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有奖!

查看全部评分

回复 使用道具 举报
实现的方法:
x=x+y:
y=x-y;
x=x-y;

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有奖!

查看全部评分

回复 使用道具 举报
本帖最后由 潜王伟 于 2011-11-17 08:42 编辑

int a=5,b=6;
   a^=b;
   b^=a;
   a^=b;
   printf("a=%d,b=%d",a,b);
利用异或的原理——因为任何数字在计算机中都是二进制,因此第一次和第二次异或使得a,b两个数字各个位数二进制互换位置(互相交换),为防止两个数字是相同情况,因此第三次再次异或。拿0,1举例子:
假设:
a = 1, b= 1
a^b = 0
b^a = 1
a^=b =1

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
咖啡 黑马帝 2011-11-17 08:45:38
地板
跟这个是一样的int a=2;int b=3
b=a+b;
System.out.println(b);
a=b-a;
b=b-a;
System.out.println(a);
System.out.println(b);

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
坚强 黑马帝 2011-11-17 08:56:13
7#
  看到题目,我愁了,看到回复,又长见识了。{:soso_e113:}
回复 使用道具 举报
泼孩 黑马帝 2011-11-17 09:56:17
8#
本帖最后由 泼孩 于 2011-11-17 09:57 编辑

int x=1,y=2;
1.先说通过第三方变量的方法
int temp; //定义个临时
temp=x;//先将X赋给temp
x=y; //将y的值赋给x,此时X的值等于y的值
y=temp;//将temp存储的x的值赋给y.
这就能实现x,y值互换,也是开发中常用的方式
2.不使用第三方变量
x=x+y;//3=1+2,x+y的值赋给x
y=x-y;//1=3-2;将x+y的值赋给x,再用此值减去y
x=x-y;//2=3-1;x+y的值赋给X,减去已得的y
但是这中方法如果x,y的值非常大,容易超出int范围
3,技巧型,不是很容易想到
原理:使用“^”异或运算符,一个数异或同一个数两次,结果还是那个数
通常用来做加密解密算法
x=x^y;
y=x^y;//-->y=(x^y)^y;
x=x^y;//-->x=x^(x^y);
基本上我所了解的这三种算法,楼主需要哪种就用哪种吧

评分

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

查看全部评分

回复 使用道具 举报
高庆亮 黑马帝 2011-11-17 10:05:21
9#
长见识了我也
回复 使用道具 举报
果断是老师基础视频里有讲到过的
回复 使用道具 举报
quanhui 黑马帝 2011-11-17 13:19:53
11#
y=x+y;
x=y-x;
y=y-x;

这种方式对于小点的数字还行,大的会越界。还是果断用异或吧

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
毕老师的视频中有详细的回答。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马