java,当我将int转换为short时,int的哪一部分将丢失

时间:2017-09-26 17:00:37

标签: java bit-manipulation

java,当我将int转换为short时,int的哪一部分将丢失。

例如,当int i = 32768时,当我将i转换为short时,哪个部分将丢失

与java一样,int有32位,short只有16位,当int转换为short时,高16位是丢失还是低16位?

1 个答案:

答案 0 :(得分:0)

短值限制为-32768到+32767,而Java在转换为短(a narrowing primitive conversion, JLS 5.1.3)时仅保留最低16位。

高16位将丢失

例5.1.3-2。缩小丢失信息的原始转换

class Test {
    public static void main(String[] args) {
        // A narrowing of int to short loses high bits:
        System.out.println("(short)0x12345678==0x" +
                           Integer.toHexString((short)0x12345678));
        // An int value too big for byte changes sign and magnitude:
        System.out.println("(byte)255==" + (byte)255);
        // A float value too big to fit gives largest int value:
        System.out.println("(int)1e20f==" + (int)1e20f);
        // A NaN converted to int yields zero:
        System.out.println("(int)NaN==" + (int)Float.NaN);
        // A double value too large for float yields infinity:
        System.out.println("(float)-1e100==" + (float)-1e100);
        // A double value too small for float underflows to zero:
        System.out.println("(float)1e-50==" + (float)1e-50);
    }
}