WEB 开发 开发语言 Java 技术 .Net 技术 数 据 库 硬件使用
图象媒体 Linux/Unix 移动平台 嵌入开发 Windows 专区 软件工程
Ajax 技术 | ASP | PHP | ASP.NET | C# | JSP | Access | Oracle | 网页设计 | Flash | 安全专题 | IIS | VC/MFC | Delphi | C/C++
 你的位置:首页 > Java 技术 > J2SE / 基础类

右移>>>的问题
[ 来源:ITWENKU 时间:2006-9-7 9:52:24 | 浏览:185人次 ]

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

显然是带符号右移,但>>>按理来说应该是不带符号的右移啊,咋整呀,同志们?



byte a=-127;
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

负号来自于向下强制转型。你要多移个百来十位,它就转正老~


像移动等运算符只对int值有效,所以都会先转为int再移
你移完后如果转成byte,那它的高位肯定还是1,当然会出现负数的情况了


To:flyingghost, Java用原码表示数据吗?按理来说应该用补码吧.

 相关文章
·Swing编程,如何实现窗体的打开和关闭!
·又一个初级java小问题
·JDBC事务请教
·JAVA 中是否有类似于.net MSDN 帮助文档呢?
·请教PreparedStatement问题,求各位大狭,关注下帮个忙。
·后台用system.out输出占用的资源多不多

 最新更新
在java中有哪个方法可以解决下面的问题啊:如取得一个雇员编号,当雇员编号<10需要在前面补0
关于static变量的用法
请问如何设置eclipse是其使用sun的Java编译器,而不是它自己的,谢谢
todo的使用?
读取大图片总是不行高手执教
有个关于JAVA向上转型的问题
如何改变键盘的输入值
FileReader与FileWriter读写"*。txt"的问题
如何将一个txt文件,读取到一个String数组里面
跟抽象类有关的问题
客户端连接服务器的时候,能绑定自己的端口号吗?
请问从socket取得的InputStream的readLine()方法是不是自动阻塞的?
 版权所有:中国IT问库
copyright © 2006 www.itwenku.com all rights reserved.