黑马程序员技术交流社区

标题: 关于强制类型转换问题,求解,感谢…… [打印本页]

作者: 莫若吻    时间: 2014-3-29 17:26
标题: 关于强制类型转换问题,求解,感谢……
  1. <p> //代码如下:</p><p>class  AbTest
  2. {
  3.       public static void main(String[] args)
  4.       { </p><p>         byte b;
  5.          double d=323.276;
  6.          System.out.println("原初始值: b未赋初始值,d="+d);
  7.          b=(byte)d;
  8.          System.out.println("强制类型转换后:b="+b+"\n"+"d="+d);
  9.       }
  10. }
  11. </p>
复制代码
运行结果:
        
问题:将d 赋值给 b后,为何b值变成了67?我认为 :赋值后b应该是323,但是323又超出了byte类型范围(-128~127),那应该是多少呢?怎么就变成67了呢?
求解!!!!!


作者: NO?    时间: 2014-3-29 17:51
因为double   d的整数位用二进制表示为(00000001,0100011)
作者: NO?    时间: 2014-3-29 17:56
刚才回复错了。因为double   d的整数位用二进制表示为(00000001,01000011)。你把它转成了byte就是取出了后八位(01000011).而后八位的值位67。即使你得到的的值。还有什么疑问可继续回复
作者: 清风木扬    时间: 2014-3-29 18:33
//double转换成byte,是先转换int类型后,再转换成byte
//byte长度是1个字节,integer是4个字节。integer转换成byte只将低8个转换过去。

//Integer.toBinaryString()转化成2进制输出方法。
System.out.println(Integer.toBinaryString(323));
System.out.println(Integer.toBinaryString(67));
//  101000011
//     1000011


  

作者: 莫若吻    时间: 2014-3-29 19:51
NO? 发表于 2014-3-29 17:56
刚才回复错了。因为double   d的整数位用二进制表示为(00000001,01000011)。你把它转成了byte就是取出了 ...

非常感谢,我明白了。
作者: 莫若吻    时间: 2014-3-29 19:55
清风木扬 发表于 2014-3-29 18:33
//double转换成byte,是先转换int类型后,再转换成byte
//byte长度是1个字节,integer是4个字节。integer转 ...

明白了,太感谢了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2