int xx=12其二进制0000,0000,0000,0000,0000,0000,0000,1100,>>32循环移动32位当然没有变化了。
>>33循环移动33位其最后四位就变成0110,其余位不变为0,结果就是6.byte xx = 12;用byte定义的变量,移动时要先进行向int的转化,变成
0000,0000,0000,0000,0000,0000,0000,1100,>>8循环移动8位后,变成:
0000, 1100, 0000,0000,0000,0000,0000,0000,最后要转化成byte输出,直截取了低16位,结果为0;
>>33循环移动33位其最后四位就变成0110,其余位不变为0,结果就是6.byte xx = 12;用byte定义的变量,移动时要先进行向int的转化,变成
0000,0000,0000,0000,0000,0000,0000,1100,>>8循环移动8位后,变成:
0000, 1100, 0000,0000,0000,0000,0000,0000,最后要转化成byte输出,直截取了低16位,结果为0;
0000,0000,0000,0000,0000,0000,0000,1100,>>8循环移动8位后,变成:
最后要转化成byte输出,直截取了低16位,结果为0;
只有算术右移和逻辑右移
运算符右端所指定的位移个数,仅有较低的5个为有用。
int xx = 12;
System.out.println(xx>>33);
相当于:
int xx = 12;
System.out.println(xx>>1);
因此,输出为6;而:
byte xx = 12;
System.out.println(xx>>8);
因为右移8位,xx已经全为0了,因此输出为0,这一点上,其实byte和int没有区别
int xx1 = 12;
System.out.println(xx1>>8);
同样输出为0