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