java 移位运算"<<"、">>"、">>>"

    xiaoxiao2021-03-26  22

    i和j都是整数

    i<<j  表示 i 的二进制左移j位,前面用符号位补充,等同于 i乘以2的j次方

    i>>j  表示 i 的二进制右移j位,后面用0补充,这里同于i除以2的j次方

    i>>>j  (无符号右移)表示 i 的二进制右移j位,前面用0补充(始终为正数)。正数和负数有区别

    代码测试时默认的是32位二进制,这里只是方便说明

    正数

    3 >> 1   3的8位二进制表示为  00000011   右移1位之后用符号位补充为  00000001  转为十进制为1

    3 << 1   3的8位二进制表示为  00000011   左移1位之后用0补充为  00000110  转为十进制为6

    负数

    -3 >> 1   -3的8位二进制表示为  11111101   右移1位之后用符号位补充前一位得到 11111110  转为十进制为-2(不同于-3除以2的1次方)

    -3 << 1   -3的8位二进制表示为  11111101   左移1位之后用0补充后一位得到  11111010  转为十进制为-6

    3>>>1   等同于  3>>1

    -3 >>> 1 右移1位之后用符号位补充前一位得到 0111111111111111111111111111110 转为十进制为2147483646

    代码如下

    System.out.println(Integer.toBinaryString(2)); System.out.println(3>>1); System.out.println(3<<1); System.out.println(-3>>1); System.out.println(-3<<1); System.out.println(-3>>>1);

    总结:左移用0补,右移用符号位补

    负数的二进制转换 

    例如-3的二进制 

    1.获取负数的绝对值的二进制。  00000011  

    2.然后求二进制反码。得到 11111100

    3.反码加1.  得到 11111101

    转载请注明原文地址: https://ju.6miu.com/read-659012.html

    最新回复(0)