java中移位符包括:>>(右移) << (左移) >>> ( 无符号右移)
在讲位移之前我们先来了解一下计算机的计算过程和原理:
计算机中数据都是以二进制源码的形式进行存储,而计算过程中都是以补码的形式进行运算,那么什么又是原码、反码、补码呢
二进制原码 反码 补码
+2 00000010 00000010 00000010
-2 11111110 10000001 10000010
正数的原码、补码、反码都是相同的,负数的原码等于其取绝对值的正数的原码并在前面补上1,反码等于原码除符号位外其他位逐次取反,补码等于反码加上1。
讲完原码、反码、补码接下来我们就可以了解移位运算了。
以2为例,2的二进制表达为 00000010,现在右移两位,即10两位被移出去,因为是整数,最高位为0,所以前面补0,即为00000000,转换成十进制,即为0
class Demo713
{
public static void main(String[] args)
{
int a=2;
System.out.println(a>>2);
}
}
同理,左移两位,最左边两位被移出去,在右边补齐0,即是00001000,转换成十进制即是8
class Demo713
{
public static void main(String[] args)
{
int a=2;
System.out.println(a<<2);
}
}
无符号右移
00000010向右移动3位,即是00000,补齐,无符号右移无论最高位是0还是1,左边补齐0,补齐之后即是00000000,转换成十进制之后是0,。
class Demo713
{
public static void main(String[] args)
{
int a=2;
System.out.println(a>>>3);
}
}