比如有这样一个例子,
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));
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));
但是我一不知道为什么,二,看了你的二进制转换感觉也应该没有问题
但是这个转换后的二进制的确不等于1130啊
希望这里有高手来回答一下啦
看来一个不小心就会造成
很崩溃的啊 不过看了楼主的还是学会了点东西