java吧 关注:1,221,663贴子:12,677,160
  • 9回复贴,共1

求助:新手学习遇到困难!

只看楼主收藏回复

public class App5 {
public static void main(String[] args){
byte X=(byte)(30*20);
System.out.println("X="+X);
}
}
/*运行结果
X=88
*/
/*问题
byte类型的取值范围是-128~127,30*20=600,虽然超过byte的范围了,但是我用了强制转换,我觉得最后的结果应该是127啊,可为什么运行出来的结果是88呢?
*/


IP属地:四川1楼2012-02-07 17:25回复
    额。计算机内的进制是二进制也就是0101
    不是我们用的10进制。


    IP属地:重庆来自掌上百度2楼2012-02-07 17:33
    回复
      600是int类型
      先转成 二进制数
      然后把最后的8位留下 应该就是88了!


      IP属地:重庆来自掌上百度3楼2012-02-07 17:35
      回复
        转换使用的是截断,不是比较大小



        IP属地:广东4楼2012-02-07 17:35
        回复
          这就是数据的精度问题了,最后强转的时候,保留了最后的八个二进制位,导致了最终结果是88。不清楚的话可以把600转成二进制,然后保留后八位,结果就出来了


          IP属地:北京来自掌上百度5楼2012-02-07 17:47
          回复
            懂了,我还以为是十进制,灰常感谢!


            IP属地:四川6楼2012-02-08 17:22
            回复
              谢谢!


              IP属地:四川7楼2012-02-08 17:22
              回复
                灰常感谢!


                IP属地:四川8楼2012-02-08 17:22
                回复
                  应该的
                  恰巧我稍微明白一些!
                  互相帮助嘛
                  加油


                  IP属地:重庆来自掌上百度9楼2012-02-08 17:59
                  回复
                    …二进制都没学过?


                    来自掌上百度10楼2012-02-08 18:11
                    回复