比如有这样一个例子,
int i=(short)66666;然后把i打印出来的值是1130,
这个是为什么?这个值的确是66666-2的16次方,也就是65536,
为什么会出现这种情况,另外这是十进制的情况下,但是如果要是以二进制来做截断转换的话,会出现下面这个情况,大家看过来
66666的二进制是10100010110000101010  然后转换为short直接截断后16位
出现如下情况,就是被转换为 10110000101010 这个数,然后在复制给int类型的,
并且由于上面都是正数就要把前面所有的未知都给补0,但是这个二进制值如果转换为10进制的时候并不等于1130,请问这个又是为了什么呢?真是想不明白,程序如下。
int i=(short)66666;

System.out.println(Integer.toBinaryString(666666));
System.out.println(Integer.toBinaryString((short)666666));

System.out.println(Integer.toBinaryString((int)(short)666666));

System.out.println(Integer.toBinaryString(i));

System.out.println("实际算出的值是"+i);
System.out.println("对应的二进制代码是:"+Integer.toBinaryString(1130));

解决方案 »

  1.   

    是挺奇怪的啊,我记得看书的时候说是直接减去65536
    但是我一不知道为什么,二,看了你的二进制转换感觉也应该没有问题
    但是这个转换后的二进制的确不等于1130啊
    希望这里有高手来回答一下啦
      

  2.   

    后面那些是6个6.....前面的是5个6
      

  3.   

    哈哈,楼上的出的对,你改回来就都对了,
    看来一个不小心就会造成
    很崩溃的啊 不过看了楼主的还是学会了点东西