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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 近夜之星 中级黑马   /  2013-10-31 12:13  /  1768 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. <p>package day1604;

  2. public class Cast
  3. {       
  4.         public static void main(String[] args)
  5.         {
  6.                 int i=257;
  7.                 double d = 323.142;
  8.                 byte a,b;
  9.                 a=(byte)i;
  10.             b = (byte)d;
  11.             System.out.println("a="+a);
  12.                 System.out.println("b="+b);

  13.         }
  14. }</p><p>
  15. </p>
复制代码
为什么a=1,b=67

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
因为i=257,强制转换成byte的二进制码是00000001,结果自然是1.
d=323.142,强制转换成byte的二进制码是01000011,结果是67.
回复 使用道具 举报
什么叫降至类型转换?就是说你超过我得范围了,但是我还是要用你,那我就把你超过我得范围的东西全都扔掉!
那么现在来看,int i=257; double d = 323.142; byte a,b;a=(byte)i; b = (byte)d;
i在内存中的表现形式: 0000-0000 0000-0000 0000-0001 0000-0001,而byte(一个字节八位)的范围是-128-127,那么这257明显超过127了吧,那么没办法,我只能用最低8位了,所以我就把你的最低8位给截取了拿到的是不是就是 0000-0001,显然这应该是1吧,就是这么来的;
至于b其实道理是一样的,先去掉小数,double是8个字节,但是我只能用整数的最后8位,那截取的道理和i是一样的。
...0000-0000 0000-0000 0000-0001 0100-0011,那最低8位就是0100-0011,对应的二进制自然是67了呀!

评分

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

查看全部评分

回复 使用道具 举报
强制类型转换的时候,超过范围的二进制码部分自动舍弃了。
回复 使用道具 举报


int i = 257;由于int类型是4个字节,也就是32位,变量i在内存中的二进制是0000-0000 0000-0000 0000-0001 0000-0001,a=(byte)i;将变量i强制转换成byte类型,而由于byte类型是1个字节,所以强制转换之后要砍掉前面的24位,剩下来的就是0000-0001,也就是1,所以输出a = 1;

double d = 323.142;由于double类型是8个字节,也就是64位,变量d在内存中的二进制是0000-0000 0000-0000 0000-0000 0000-0000 0000-0000 0000-0000 0000-0001 0100-0011, b = (byte)d;是将变量d强制转换成byte类型,而byte类型是1个字节,所以要砍掉前面的56位,剩下来的就是0100-0011,也就是67,所以打印输出b = 67;

评分

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

查看全部评分

回复 使用道具 举报
byte类型的数据的范围是-128-127,楼主所强转的int i=257和double d = 323.142都超过了byte数据类型的范围,超过范围的二进制码部分自动舍弃了。
强转之后a拿到的数据是0000-0001,b拿到的数据是0100-0011
                                           1                                        67
回复 使用道具 举报
0从谷0 发表于 2013-10-31 12:24
因为i=257,强制转换成byte的二进制码是00000001,结果自然是1.
d=323.142,强制转换成byte的二进制码是01000 ...

明白了,thankyou!:P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马