** 文章摘要 **
1、移位包括左移和右移。左移相当于乘法,右移相当于除法。
2、右移包括带符号右移,无符号右移。
一、“位移”操作规则
1、左移:“a<<b”,将二进制a依次左移b位,低位空出来的b个位置补0。
2、带符号右移:“a>>b”,将二进制数a依次右移b位,高位空出来的b个位置,补充原来的符号位,即:正数补0,负数补1。
3、无符号右移:“a>>>b”,将二进制数a依次右移b位,高位空出来的b个位置,补0。
- 1、左移3位操作实例:
value | 移位前 | 移位后 |
---|---|---|
-2) | 11111111111111111111111111111110 | 11111111111111111111111111110000(-16) |
2 | 0000 0010 | 0001 0000(16) |
- 2、带符号右移3位实例:
value | 移位前 | 移位后 |
---|---|---|
-16 | 11111111111111111111111111110000 | 11111111111111111111111111111110(-2) |
16 | 0001 0000 | 0000 0010(2) |
- 3、无符号右移3位实例:
value | 移位前 | 移位后 |
---|---|---|
-16 | 11111111111111111111111111110000 | 00011111111111111111111111111110 |
16 | 0001 0000 | 0000 0010(2) |
二、“位移”操作的运用
一般来说,位移比乘除算式运算效率更高。
1、左移相当于乘法,每移一位相当于乘2;
System.out.println("1<<1 = "+(1<<1)
+",1<<2 = "+(i<<2)
+",1<<3 = "+(i<<3));//1<<1 = 2,1<<2 = 4,1<<3 = 8
2、右移相当于除法,每移一位相当于除2;
System.out.println("8>>1 = "+(8>>1)
+",8>>2 = "+(8>>2)
+",8>>3 = "+(8>>3));//8>>1 = 4,8>>2 = 2,8>>3 = 1
网友评论