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。谢谢回答
展开
3个回答
展开全部
移位操作:
左移<<:向左移位,符号后面的数字是移了多少位,移的位用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.
左移<<:向左移位,符号后面的数字是移了多少位,移的位用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.
展开全部
0xa2是142, 已经超过了 byte 的存储空间(-128~+127),会溢出,得到了一个未知的数.
>>>是无符号右移,对于正数相当于除以了4(2^2).
>>>是无符号右移,对于正数相当于除以了4(2^2).
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询