Java

    xiaoxiao2022-07-07  199

    左移和右移都是对整数的补码进行运算的

    左移就是补码向左移两位,每左移一位就相当于补码所对应的十进制的整数  *2

    右移就是补码向右移两位,每右移一位就相当于补码所对应的十进制的整数  \2


    61补码:00..0 11 1101    (Java的整型默认类型为Int,int占32bit)

    左移:00..0 0011 1101 << 00..0 0111 1010 << 00..0 1111 0100 (244)

    右移:00..0 0011 1101 >> 00..0 0001 1110 >> 00..0 0000 1111 (15)

    System.out.println((byte)(61<<2)); //-12 System.out.println(61<<2);//244 System.out.println(0b0011111111111111111111111111111111111111111111111111111111111111l<<2); //-4 System.out.println(-61>>>2); //1073741808 System.out.println(61>>>2); //15

    1、3句都是溢出了,不能保持原来的正负

    >>>是无符号右移,无符号右移右移后前面会补0,负数无符号右移后都会变为正数,正数的无符号右移和普通右移一样

    只有无符号右移>>> 

    为什么没有无符号左移? 

    无符号左移没意义,因为无符号左移和带符号的左移一样都是左移后往后面补0

    最新回复(0)