8月 062019
右移>>是指带符号右移,如果最高位的符号位为1,则右移时左侧补上的空位用1填充,否则用0填充
而无符号右移>>>,不管左侧最高位是1还是0,左侧补上的空位统统用0填充,如下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public static void main(String[] args){ int i = 390228; String ibstr = int2BitStr(i); System.out.println(ibstr); int i1 = i << 13 >>> 29; int i2 = i << 13 >> 29; System.out.println("无符号右移:" + int2BitStr(i1)); System.out.println("带符号右移:" + int2BitStr(i2)); System.out.println("无符号右移:" + i1); System.out.println("带符号右移:" + i2); } String int2BitStr(int value){ String ibstr = Integer.toBinaryString(value); // 显示全部二进制字符,32位 while (ibstr.length() < 32){ ibstr = "0" + ibstr; } String ibstr1 = ibstr.substring(0, 8) + " " + ibstr.substring(8, 16) + " " + ibstr.substring(16, 24) + " " + ibstr.substring(24, 32); return ibstr1; } |
看输出结果:
1 2 3 4 5 |
00000000 00000101 11110100 01010100 无符号右移:00000000 00000000 00000000 00000101 带符号右移:11111111 11111111 11111111 11111101 无符号右移:5 带符号右移:-3 |
我们从第13位开始左移,即第二字节的101那里,左移后的结果如下,右侧应该有一些0用省略号代替了
101 11110100 01010100…..
我们再右移29位,即只剩下101,那么如果用>>前面将被补上很多的1,如果使用>>>,则会补很多0
Sorry, the comment form is closed at this time.