Java的移位操作符一共有三种,
分别是
1.>>:有符号右移,有符号右移的意思是说移入的最高位和原最高符号位相同
2.>>>:无符号右移,无符号右移是移入位始终补零,左移时最低位始终补零,最高位被舍弃
3.<<:左移,有符号左移的意思是说移入的最高位和原最高符号位相同
例如
int a = 100 转化为二进制为 0110 0100
: 0110 0100 >> 2 ----- 0001 1001 转化为十进制为 25
int a = 100;
System.out.println(a >> 2);
输出结果:25
: 1100 1100 0000 1010 >> 2 ----- 1111 0011 0000 0010
:1100 1100 0000 1010 >>>2 ----- 0011 0011 0000 0010
移位操作符另一个非常值得注意的特点是其右操作数是取模运算的,意思是说对于一个int型数据而言,对它移位32位的结果是保持不变而非变成零,即:a>>32的结果是a而不是0,同理,对long型数是对右操作数取64的模,a>>64==a;
int a = 100;
System.out.println(a >> 32);
输出结果 100。
还有一点需要注意的是移位操作符”>>>”只对int型和long型有效,对byte或者short的操作将导致自动类型转换,而且是带符号的。
分别是
1.>>:有符号右移,有符号右移的意思是说移入的最高位和原最高符号位相同
2.>>>:无符号右移,无符号右移是移入位始终补零,左移时最低位始终补零,最高位被舍弃
3.<<:左移,有符号左移的意思是说移入的最高位和原最高符号位相同
例如
int a = 100 转化为二进制为 0110 0100
: 0110 0100 >> 2 ----- 0001 1001 转化为十进制为 25
int a = 100;
System.out.println(a >> 2);
输出结果:25
: 1100 1100 0000 1010 >> 2 ----- 1111 0011 0000 0010
:1100 1100 0000 1010 >>>2 ----- 0011 0011 0000 0010
移位操作符另一个非常值得注意的特点是其右操作数是取模运算的,意思是说对于一个int型数据而言,对它移位32位的结果是保持不变而非变成零,即:a>>32的结果是a而不是0,同理,对long型数是对右操作数取64的模,a>>64==a;
int a = 100;
System.out.println(a >> 32);
输出结果 100。
还有一点需要注意的是移位操作符”>>>”只对int型和long型有效,对byte或者short的操作将导致自动类型转换,而且是带符号的。