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