当前页面: 开发资料首页 → J2SE 专题 → 右移-gt;-gt;-gt;的问题
右移-gt;-gt;-gt;的问题
摘要: 右移-gt;-gt;-gt;的问题
byte a=-127;
for(int i=0;i-#60;8;i++)
{
a=(byte)(a-#62;-#62;-#62;1);
System.out.println(a);
}
结果是:-64,-32,-16,-8,-4,-2,-1,-1
显然是带符号右移,但-#62;-#62;-#62;按理来说应该是不带符号的右移啊,咋整呀,同志们?
byte a=-127;
for(int i=0;i-#60;8;i++)
{
int ba=a-#62;-#62;-#62;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
负号来自于向下强制转型。你要多移个百来十位,它就转正老~
像移动等运算符只对int值有效,所以都会先转为int再移
你移完后如果转成byte,那它的高位肯定还是1,当然会出现负数的情况了
To:flyingghost, Java用原码表示数据吗?按理来说应该用补码吧.