Java里的左移和右移
左移
在Java中
左移运算符“<<” - 使指定值的所有位都左移规定的次数。
左移m<<n 代表把数字m在无溢出的前提下乘以2的n次方。
public class Main {
public static void main(String[] args) {
int a = 5;
int b = a << 2;
System.out.println(b);
}
}
5:101
左移2位:10100,即20
在这个例子中,我们定义了一个整数变量a并将其设置为5。然后,我们使用左移运算符将a的所有位向左移动2个位置。结果,b的值为20。
右移
右移运算符“>>” - 使指定值的所有位都右移规定的次数。
右移m>>n 代表把数字m除以2的n次方,原来是正数的还是正数,负数还是负数。
public class Main {
public static void main(String[] args) {
int a = 20;
int b = a >> 2;
System.out.println(b);
}
}
20:10100
右移两位:101,即5
在这个例子中,我们定义了一个整数变量a并将其设置为20。然后,我们使用右移运算符将a的所有位向右移动2个位置。结果,b的值为5。
无符号右移
运算符“>>>” - 同右移,但是结果全变正数。
public class Main {
public static void main(String[] args) {
int a = -4;
int b = a >>> 1;
System.out.println(b);
}
}
在这个例子中,我们定义了一个整数变量a并将其设置为-4。然后,我们使用无符号右移运算符将a的所有位向右移动1个位置。结果,b的值为2147483646。
-4的二进制表示是11111111111111111111111111111100
右移一位后是01111111111111111111111111111110,即十进制的2147483646
两种右移有什么区别?
在Java中,右移运算符“>>” - 使指定值的所有位都右移规定的次数。 右移m>>n 代表把数字m除以2的n次方,原来是正数的还是正数,负数还是负数。 无符号右移运算符“>>>” - 同右移,但是结果全变正数。
有符号右移运算符“>>”和无符号右移运算符“>>>”之间的区别在于,有符号右移运算符“>>”将最高位(即符号位)复制到左侧,而无符号右移运算符“>>>”则将左侧填充零。