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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© asinzuo 中级黑马   /  2015-8-5 12:12  /  2980 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
将两个数内容交换和交换两个整数有区别吗?
还有,下面三种交换方法 有区别吗?

                                int a = 153 ;
                                int b = 407 ;

                                方法1:                               
                                a = a^b;
                                b = a^b;
                                a = a^b;
                               

                                方法2
                                int temp = a;
                                a = b ;
                                b = temp ;

                                方法3
                                a = a + b ;
                                b = a - b ;
                                a = a - b ;       

最佳答案

查看完整内容

当然有区别,先说第二种,引入的一个中间变量,在内存中多开辟了一块内存。 再说第三种,加和可能引起变量内存溢出 第一种使用位运算,避免了第三种可能出现的情况,但是只能用于整形运算,各有利弊。

14 个回复

倒序浏览
当然有区别,先说第二种,引入的一个中间变量,在内存中多开辟了一块内存。
再说第三种,加和可能引起变量内存溢出
第一种使用位运算,避免了第三种可能出现的情况,但是只能用于整形运算,各有利弊。
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-8-5 12:43:35
藤椅
怎么破?
回复 使用道具 举报
楼上解释很详尽..
回复 使用道具 举报
方法1:异或同一个数,属于技巧性的换位,
方法2:引用中间值换位,简单易懂,较常用
方法3:求和换位,当数值很大时,易超出int范围
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-8-5 16:22:58
地板
Eil.tea 发表于 2015-8-5 13:51
当然有区别,先说第二种,引入的一个中间变量,在内存中多开辟了一块内存。
再说第三种,加和可能引起变量 ...

将两个数内容交换和交换两个整数有区别吗?这句话怎么理解?
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-8-5 16:24:32
7#
徐鹏辰 发表于 2015-8-5 15:58
方法1:异或同一个数,属于技巧性的换位,
方法2:引用中间值换位,简单易懂,较常用
方法3:求和换位,当 ...

标题怎么解释?
回复 使用道具 举报
楼上解释很到位!!!
回复 使用道具 举报
可以用函数指针交换
回复 使用道具 举报
小数据。。没什么区别的。。数据多了,,他们所运行的速度和所开辟的空间就不一样了
回复 使用道具 举报
asinzuo 来自手机 中级黑马 2015-8-7 09:01:50
11#
STARlove 发表于 2015-8-6 21:51
小数据。。没什么区别的。。数据多了,,他们所运行的速度和所开辟的空间就不一样了  ...

在书上看到两个题目,一个是:将两个数内容交换,还有一个题目是:交换两个整数。这两个题目意思有区别吗。
回复 使用道具 举报
方法1:一个变量异或两次得到原引用,与方法3的相似之处在于变量间的换位没有开辟第三的变量;

方法2:是很普通的变量之间的换位

回复 使用道具 举报
asinzuo 发表于 2015-8-7 09:01
在书上看到两个题目,一个是:将两个数内容交换,还有一个题目是:交换两个整数。这两个题目意思有区别吗。 ...

题目有点不严谨我 觉得,数应该说大小而不是内容。因为数不是容器,不存储东西  哈哈

话说回来,这两个题目是有区别:
第二题:直接给出了数的类型是int
第一题:直说是数,所以接受的参数可能是整数,也可能是小数,所以第一题是设置了陷阱的  考察是否审题仔细,对于接受多种类型的数据但功能一样的函数  可以通过函数重载的方式实现。
回复 使用道具 举报
我再来提供一个方法,可以避免值溢出

  方法4
                                a = a - b ;   //a是a和b的差值
                                b = b + a ; //b加上  (a和b的差值) 等于  a
                                a = b - a ; // a 减去 (a和b的差值)  等于  b
回复 使用道具 举报
iamzk 中级黑马 2015-8-14 19:35:59
15#
可以这样写:a = a + b - (b = a);
这样就不会有以上问题了。
  1. class Exchange
  2. {
  3.         public static void main(String []args)
  4.         {
  5.                 int a = 5,b = 4;
  6.                 a = a + b - (b = a);
  7.                 System.out.println("a=" + a + ",b=" + b);
  8.                
  9.                 }
  10. }
复制代码

QQ截图20150814193712.jpg (11.66 KB, 下载次数: 15)

QQ截图20150814193712.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马