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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ixiangfeng 金牌黑马   /  2013-10-31 13:58  /  1424 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. public class Xiaohuihui {
  2.         public static void main(String[] args) {
  3.                 int a = Integer.MAX_VALUE;
  4.                 int b = 12;
  5.                 a = a + b;
  6.                 b = a - b;
  7.                 a = a - b;
  8.                 System.out.println(Integer.MAX_VALUE);
  9.                 System.out.println(a);
  10.                 System.out.println(b);
  11.         }
  12. }
复制代码
这问题是昨天一哥们问的 但是问题还没解决他就改为提问结束了 所以我再来求助
毕老师的视频也说是有bug的 就是当两个数之和超过int类型时会溢出 我也一直是这样觉得的 但昨天那位兄弟提出这个问题时我去测试过的确地可以转换的 而且两数之和也的确溢出了 为什么会这样呢? 要么是毕老师说错了我自己也理解错了 要么就是还有哪里没注意到  求高手指点


各位兄弟麻烦看清楚我问的是什么 不要再给我说例如下面这些东西了


//小练习:将两个变量内部的值进行互换。

//1,通过第三方变量。
int temp;
temp =n;
n=m;
m=temp;
//2,不用第三方变量
/*
11=3+8
8=11-3
2=11-8
*/
n=n+m;
m=n-m;
n=n-m;//但是,这种方法有局限性,如果n,m值非常大,则会超出int范围。

n=n^m;
m=n^m;//^:亦或.。此时的表达式是:(n^m)^m【但是,此时m的值已经变为之前的n的值了】
n=n^m;//                 此时的表达式是:(n^m)^n
//一个数,如果同时对一个数异或两次,那就是原数。

评分

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

查看全部评分

4 个回复

倒序浏览
搞不清楚心里不舒服啊~~ 求大神指点一下
回复 使用道具 举报
可以尝试以下方法
  1. //test.java
  2. public class test
  3. {       
  4.           public static void main(String[] args)
  5.         {
  6.                         //正数极限测试
  7.                         int a=2147483647;//此测试数已达int类型正数部分的极限
  8.                         int b=2147483646;

  9.                         //测试用------------------------------
  10.                         /*
  11.                         //正负极限测试
  12.                         int a=-2147483648;//此测试数已达int类型负数部分的极限
  13.                         int b=2147483647;//此测试数已达int类型正数部分的极限
  14.                         */

  15.                         /*
  16.                         //负数限测试
  17.                         int a=-2147483648;//此测试数已达int类型负数部分的极限
  18.                         int b=-2147483647;//
  19.                         */

  20.                         System.out.println("原来的a——  "+a);
  21.                         System.out.println("原来的b——  "+b);

  22.                         //两数交换过程
  23.                         if (a>b)
  24.                         {
  25.                                 a=a-b;
  26.                                 b=b+a;
  27.                                 a=b-a;
  28.                         } else {
  29.                                 b=b-a;
  30.                                 a=a+b;
  31.                                 b=a-b;
  32.                         }

  33.                         System.out.println("——————————————");
  34.                         System.out.println("交换后的a——  "+a);
  35.                         System.out.println("交换后的b——  "+b);
  36.         }
  37. }  
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报

你这样做的确可以的 而且想法不错 但是还是没有解答我的问题吧? 我就是想问 两数相加之和都溢出了却还能完成交换?
回复 使用道具 举报
     int a=2147483647;
                        int b=46;                        
                        System.out.println("原来的a——  "+a);
                        System.out.println("原来的b——  "+b);
                                                System.out.println("——————————————");
                                            a=a+b;
                                                System.out.println(a);
                                                System.out.println(b);
                                                b=a-b;
                                                System.out.println(a);
                                                System.out.println(b);
                                                a=a-b;
                        System.out.println("——————————————");
                        System.out.println("交换后的a——  "+a);
                        System.out.println("交换后的b——  "+b);

朋友,我利用楼上哥们的代码,加了两句输出语句,打出值 看了下,我这样认为
你想,int最大正数是MAX 和最小负数是有一个区间的,如果,两个int数相加超最大正数后,溢出二进制首位0变1,为负数,
而下步你又用这个溢出的负数和b相减,又再次溢出int 的最小负数,二进制首位又从1变为了0.所以就出现了你说的值交换成功,
我总结的不太好,但就是这个意思,你再根据我说的话推理下,想想,应该就是这个原因 了,

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马