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

3 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);


    }
}
Run Code Online (Sandbox Code Playgroud)

结果是:

我和b 257 1

d和i 323.142 323

d和b 323.142 67

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

Mar*_*aux 5

所有这些都称为缩小原始转换(第5.1.3节):

  1. 对话(byte):

           257 = 0000 0001 0000 0001
    
    Run Code Online (Sandbox Code Playgroud)

    截断高字节给出:

    (byte) 257 = xxxx xxxx 0000 0001
    
    Run Code Online (Sandbox Code Playgroud)

    这显然是1.

  2. 从浮点到整数的对话总是从零到零.

  3. 从对话doublebyte发生在两个步骤:

    1. double被铸造成int,继向零规则.

      (int) 323.142  ~~~>  323
      
      Run Code Online (Sandbox Code Playgroud)
    2. int被截断一个字节.

      (byte) 323     ~~~~> 67
      
             323 = 0000 0001 0100 0011
      (byte) 323 = xxxx xxxx 0100 0011
                 = 67
      
      Run Code Online (Sandbox Code Playgroud)