站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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用原码表示数据吗?按理来说应该用补码吧.


↑返回目录
前一篇: 关于dom4j如何读取xml内容的问题?
后一篇: 后台用system.out输出占用的资源多不多