public class test {
    public static void main(String[] args){
    byte mybyte=123;
    short myshort=1234;
    int myint=123456;
    long mylong=1234563234345L;
    long result=mybyte+myshort+myint+mylong;
  System.out.println("结果是="+(int) result);
}}
为什么在输出结果中,"结果是="+result编译解释后的总和是1234563359158?
        输出结果中,"结果是="+(int) result编译解释后的总和是1907745206?
  这个是为什么,求高手解答,谢谢了。
  我是初学,谢谢高手

解决方案 »

  1.   

    long类型占8个字节64位,int占4个字节32位,以二进制的形式存储,你进行强转的时候,高位被截断,因为容纳不下,然后就留下了低位。 
      

  2.   

    int是32位4字节与long是64位8字节相比,int高位被截取,是如何截取的,我看只截取了前三位,但是截取前三位后的结果对不上。不明白。
      

  3.   

    "结果是="+result编译解释后的总和是1234563359158
    "结果是="+(int) result编译解释后的总和是1907745206
    原理已经被上面好几楼说清楚了,我这里就演示一下过程.
    首先1234563359158 是long型,二进制存储如下:
    1*100011111110001101101011110000110110110 前面的1表示正数,*号代表好多个0,凑足64位。
    然后int只需要末尾32位,即:101110001101100111111101000101001。。此时首位仍然是1,表示正数。第二位是0忽略,从第三位开始算,即只能取1110001101100111111101000101001取转换成十进制,得到结果正好是1907745206
      

  4.   

    long a = 1234563359158L; String bs = Long.toBinaryString(a);
    while (bs.length() < 64)
    bs = "0" + bs; System.out.println(bs);// 打印出a的二进制表示 bs = bs.substring(32);// 截取低32位 System.out.println(bs); System.out.println(Integer.parseInt(bs, 2));// 将截取出来的二进制转换成10进制 System.out.println((int) a);// 直接强制类型转换
    0000000000000000000000010001111101110001101101011110000110110110
    01110001101101011110000110110110
    1907745206
    1907745206