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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

345723427

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 345723427 初级黑马   /  2016-4-13 01:30  /  670 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        1..        double i=(10*0.1*0.1*0.1*0.1);
                int j=8850;
                int y=1;
                int z=2;
         while(i*z<8850){
                         y++;
                        z=2*z;


                  }
                  System.out.println("y="+y);  //输出的Y为24
                  System.out.println("z="+z); //z为16777216

        2..        int i=10^(-4);
                int j=8850;
                int y=1;
                int z=2;
         while(i*z<8850){
                         y++;
                        z=2*z;


                  }
                  System.out.println("y="+y);  //输出的Y为28
                  System.out.println("z="+z); //z为268435456

       3.       int i=10^(-4);
                int j=8850;
                int y=1;
                int z=2;
         while(i*z<8850){
                         y++;
                        z=2*z;


                  }
                  System.out.println("y="+y);  //输出的Y为27
                  System.out.println("z="+z); //z为134217728

             4..int i=10^(-4);
                int j=8850;
                int y=1;
                int z=2;
         while(i*z<8850){
                         y++;
                        z=2*z;


                  }
                  System.out.println("y="+y);  //输出的Y为28
                  System.out.println("z="+z); //z为268435456



为什么上面输出的结果不一样啊   卡死很久了    求解答   

4 个回复

倒序浏览
本帖最后由 zhongyuxin1011 于 2016-4-13 21:27 编辑

2、3、4有区别吗?那就一起说吧,int的取值范围-2^31~2^31-1。2、3、4都是一样的原因,超出取值范围(i*z),刚开始10和-4异或运算结果还是负数,负数乘以正数还是负数,直到最后一次(y=28)后,乘积超出范围,丢失部分后数据比8850大,结束while循环。

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
class Test_003 {
        public static void main(String[] args) {
                int i = 10^(-4);
                 double j=10*0.1*0.1*0.1*0.1;
                System.out.println(i); //打印 -10
                System.out.println(j); // 打印0.001
        }
}
/* 后面三个结果是一样的 ,第一个不一样
   楼主可能想表达的是 i= 10^(-4)  就是10的负次四方赋值给i
   假设可以的话  i=0.0001  结果不一样 多个0
   问题在于 10^(-4)中的^表示的是 位异或  不是平方立方的意思
   所以初始值不同  结果不同*/

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
再解释一下  int取值最大是2147483547  
题目中2  3  4 的 i 的初始值都是 -10
也就是说 while 看起来像 是个死循环  因为-10 是负数 所以条件一直成立
但是只到 z 自己翻倍超出 int 范围  然后赋值给 z 的一个错误结果  但是可能是负数  循环条件就不满足了  才会结束
所以打印才会有结果
回复 使用道具 举报
谢谢各位  太感谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马