java
移位运算符不外乎就这三种:
<<
(左移)、
>>
(带符
号右移)和
>>>
(无符号右移)
1
、
左移运算符
左移运算符
<<
使指定值的所有位都左移规定的次数。
1
)它的通用格式如下所示
:
value <
num
指定要移位值
value
移动的位数。
左移的规则只记住一点:
丢弃最高位,
0
补最低位
如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数
取模
。如对
int
型移动
33
位,实际上只移动了
33%32=1
位。
2
)运算规则
按二进制形式把所有的数字向左移动对应的位数,高位移出
(
舍弃
)
,低位的空位补零。
当左移的运算数是
int
类型时,每移动
1
位它的第
31
位就要被移出并且丢弃;
当左移的运算数是
long
类型时,每移动
1
位它的第
63
位就要被移出并且丢弃。
当左移的运算数是
byte
和
short
类型时,将自动把这些类型扩大为
int
型。
3
)数学意义
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以
2
的
1
次方
,左
移
n
位就相当于乘以
2
的
n
次方
4
)计算过程:
例如:
3 <<2(3
为
int
型
)
1
)把
3
转换为二进制数字
0000 0000 0000 0000 0000 0000 0000 0011
,
2
)把该数字高位
(
左侧
)
的两个零移出,其他的数字都朝左平移
2
位,
3
)
在低位
(
右侧
)
的两个空位补零。
则得到的最终结果是
0000
0000
0000
0000
0000
0000
0000 1100
,
转换为十进制是
12
。
移动的位数超过了该类型的最大位数,
如果移进高阶位(
31
或
63
位),那么该值将变为负值。下面的程序说明了这一点:
Java
代码
// Left shifting as a quick way to multiply by 2.
public class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i<4; i++) {
num = num <