黑马程序员技术交流社区

标题: JAVA里类型强制转换问题 [打印本页]

作者: 近夜之星    时间: 2013-10-31 12:13
标题: JAVA里类型强制转换问题
  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

作者: 0从谷0    时间: 2013-10-31 12:24
因为i=257,强制转换成byte的二进制码是00000001,结果自然是1.
d=323.142,强制转换成byte的二进制码是01000011,结果是67.
作者: 李慧声    时间: 2013-10-31 12:38
什么叫降至类型转换?就是说你超过我得范围了,但是我还是要用你,那我就把你超过我得范围的东西全都扔掉!
那么现在来看,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了呀!
作者: 魏春旭    时间: 2013-10-31 12:48
强制类型转换的时候,超过范围的二进制码部分自动舍弃了。
作者: mayor125    时间: 2013-10-31 13:28


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;

作者: 胡志翔    时间: 2013-10-31 13:39
byte类型的数据的范围是-128-127,楼主所强转的int i=257和double d = 323.142都超过了byte数据类型的范围,超过范围的二进制码部分自动舍弃了。
强转之后a拿到的数据是0000-0001,b拿到的数据是0100-0011
                                           1                                        67
作者: 近夜之星    时间: 2013-10-31 14:02
0从谷0 发表于 2013-10-31 12:24
因为i=257,强制转换成byte的二进制码是00000001,结果自然是1.
d=323.142,强制转换成byte的二进制码是01000 ...

明白了,thankyou!:P




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