java(byte)>>>时怎么运算的

(byte)0xa2>>>2得到1073741800。(byte)0x72>>>2却是28、为什么相差这么大。而且。(int)0xa2>>>2也是是28。谢谢回答... (byte)0xa2>>>2 得到1073741800。(byte)0x72>>>2却是28、为什么相差这么大。而且。(int)0xa2>>>2也是是28。谢谢回答 展开
 我来答
kevintop3
推荐于2018-04-05 · TA获得超过1.5万个赞
知道小有建树答主
回答量:890
采纳率:100%
帮助的人:534万
展开全部
移位操作:
左移<<:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。
右移>>:向右移位,符号后面的数字是移了多少位,移的位用符号位补齐,例如01111111右移一位后变为00111111,而10000000右移一位后变成11000000,因为符号位是1。

(byte)0xa2>>>2 = 2

(byte)0x72>>>2 = 28

(int)0xa2>>>2 =28 (错误)

(byte)0x72 是十进制的114, 114转换成二进制是 1110010,1110010>>>2 (位移两位)是11100,而11100转换成十进制是:28

而(int)0xa2是十进制的162,162转换成二进制是 10100010, 10100010>>>2 是101000 ,实际的值是40,不是28.
沈从溪
2013-08-16 · TA获得超过151个赞
知道答主
回答量:104
采纳率:0%
帮助的人:70.1万
展开全部
0xa2是142, 已经超过了 byte 的存储空间(-128~+127),会溢出,得到了一个未知的数.
>>>是无符号右移,对于正数相当于除以了4(2^2).
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
社稷最开心9
2013-08-17 · TA获得超过288个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:171万
展开全部
这些是位运算,>>> 右移,左边空出的位以0填充
这上面有详细的解释
http://blog.csdn.net/lu7kang/article/details/5049471
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式