不理解double类型到byte类型的转换结果

时间:2014-02-04 22:51:33

标签: java casting type-conversion

您好我的书中有任务写这段代码

public class EkspKonverzija 
{
    public static void main(String args[])
    {
        byte b;
        int i=257;
        double d= 323.142;

        b=(byte) i;
        System.out.println("i and b "+i+" "+b);

        i=(int) d;
        System.out.println("d and i "+d+" "+i);

        b=(byte) d;
        System.out.println("b and d "+b+" "+d);


    }
}

结果是:

  

i和b 257 1

     

d和i 323.142 323

     

d和b 323.142 67

我理解为什么第一次转换的结果是1,我也理解第二次转换,但我不知道为什么结果67在最后一次转换,我无法弄清楚所以我需要你的帮助。感谢

1 个答案:

答案 0 :(得分:5)

所有这些都称为Narrowing Primitive Conversion (§5.1.3)

  1. (byte)的对话:

           257 = 0000 0001 0000 0001
    

    截断高字节给出:

    (byte) 257 = xxxx xxxx 0000 0001
    

    显然是1。

  2. 从浮点到整数的对话始终舍入为零

  3. doublebyte的对话分两步进行:

    1. double舍入为零规则之后被投放到int

      (int) 323.142  ~~~>  323
      
    2. int被截断为一个字节。

      (byte) 323     ~~~~> 67
      
             323 = 0000 0001 0100 0011
      (byte) 323 = xxxx xxxx 0100 0011
                 = 67