移位运算符操作的对象就是二进制的位,可以单独用移位运算符来处理int型整数。
| 运算符 | 含义 | 例子 |
| << | 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0) | x<<3 |
| >> | "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1. | x>>3 |
| >>> | "无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0. | x>>>3 |
1, 看图之前,应该先了解int数据类型 为32位,那么2039转成功二进制之后的排列才能看懂。
2,低位补充,不论是正是负低位都是统一的补0。
以int类型的6297为例,代码如下:
[java] view plaincopy
- System.out.println(Integer.toBinaryString(6297));
- System.out.println(Integer.toBinaryString(-6297));
- System.out.println(Integer.toBinaryString(6297>>5));
- System.out.println(Integer.toBinaryString(-6297>>5));
- System.out.println(Integer.toBinaryString(6297>>>5));
- System.out.println(Integer.toBinaryString(-6297>>>5));
- System.out.println(Integer.toBinaryString(6297<<5));
- System.out.println(Integer.toBinaryString(-6297<<5));
运行结果:
1100010011001
11111111111111111110011101100111
11000100
11111111111111111111111100111011
11000100
111111111111111111100111011
110001001100100000
11111111111111001110110011100000
注:x<<y 相当于 x*2y ;x>>y相当于x/2y
从计算速度上讲,移位运算要比算术运算快。
如果x是负数,那么x>>>3没有什么算术意义,只有逻辑意义。