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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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了呢?
求解!!!!!

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
因为double   d的整数位用二进制表示为(00000001,0100011)
回复 使用道具 举报
刚才回复错了。因为double   d的整数位用二进制表示为(00000001,01000011)。你把它转成了byte就是取出了后八位(01000011).而后八位的值位67。即使你得到的的值。还有什么疑问可继续回复

评分

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

查看全部评分

回复 使用道具 举报
//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


  

评分

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

查看全部评分

回复 使用道具 举报
NO? 发表于 2014-3-29 17:56
刚才回复错了。因为double   d的整数位用二进制表示为(00000001,01000011)。你把它转成了byte就是取出了 ...

非常感谢,我明白了。
回复 使用道具 举报
清风木扬 发表于 2014-3-29 18:33
//double转换成byte,是先转换int类型后,再转换成byte
//byte长度是1个字节,integer是4个字节。integer转 ...

明白了,太感谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马