byte a=-127;
for(int i=0;i<8;i++)
{
a=(byte)(a>>>1);
System.out.println(a); }结果是:-64,-32,-16,-8,-4,-2,-1,-1显然是带符号右移,但>>>按理来说应该是不带符号的右移啊,咋整呀,同志们?
for(int i=0;i<8;i++)
{
a=(byte)(a>>>1);
System.out.println(a); }结果是:-64,-32,-16,-8,-4,-2,-1,-1显然是带符号右移,但>>>按理来说应该是不带符号的右移啊,咋整呀,同志们?
for(int i=0;i<8;i++)
{
int ba=a>>>1;
a=(byte)ba;
System.out.println(ba);
}你要看效果应该这样才能看得到
它的输出是:
2147483584
2147483616
2147483632
2147483640
2147483644
2147483646
2147483647
2147483647
这样就全都是正数了
a=-127 1111 1111
a晋升为int 1111 1111 1111 1111 1111 1111 1000 0001
无符号右移 0111 1111 1111 1111 1111 1111 1100 0000
强制转为byte 1100 0000
输出 -64负号来自于向下强制转型。你要多移个百来十位,它就转正老~
你移完后如果转成byte,那它的高位肯定还是1,当然会出现负数的情况了