JAVA整形类型转换深入研究

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nimasike/article/details/88389799

1、负数低位转高位(隐式转换)

public static void main(String[] args) throws Exception {
     byte b1 = -28;
     int  a1 = b1;
     System.out.println(a1);
     System.out.println(Integer.toBinaryString(a1));
    //-28
    //11111111111111111111111111100100
}

b1的二进制值为[11100100],负数向上转型,高位全部填充为1,int类型为4个字节32位,则高24位全部为1。

[11111111],[11111111],[11111111],[11100100],所以a1=28。

2、正数低位转高位(隐式转换)

    public static void main(String[] args) throws Exception {
        byte b1 = 28;
        int  a1 = b1;
        System.out.println(a1);
        System.out.println(Integer.toBinaryString(a1));
        System.out.println(String.format("%32s",
                Integer.toBinaryString(a1)).replaceAll(" ", "0"));
        //00000000000000000000000000011100
        //28
    }

b1的二进制值为[00011100],正数向上转型,高位全部填充为0,int类型为4个字节32位,则高24位全部为0。

[00000000],[00000000],[00000000],[00011100],所以a1=28。

3、正负数高位转低位(强制转换)会发生溢出

public static void main(String[] args) throws Exception {
        int a1 = 228;
        byte b1 = (byte) a1;
        System.out.println(b1);
        System.out.println(Integer.toBinaryString(a1));
        System.out.println(String.format("%32s",
            Integer.toBinaryString(a1)).replaceAll(" ", "0"));
//-28
//00000000000000000000000011100100
    }

a1的值为228,二进制值为[00000000000000000000000011100100],转换为byte,byte类型只有8位,所以高24为直接丢掉,转换后的值为[11100100],所以b1的值为-28。

    public static void main(String[] args) throws Exception {
        int a1 = -228;
        byte b1 = (byte) a1;
        System.out.println(b1);
        System.out.println(Integer.toBinaryString(a1));
        System.out.println(String.format("%32s",
                Integer.toBinaryString(a1)).replaceAll(" ", "0"));
    }

a1的值为-228,二进制的值为[11111111111111111111111100011100],转换为byte,byte类型只有8位,所以高24位直接丢掉,转换后的值为[00011100],所以b1的值为28。

猜你喜欢

转载自blog.csdn.net/nimasike/article/details/88389799
今日推荐