永发信息网

java 中右移>>和逻辑右移>>的左操作数怎么运算的

答案:2  悬赏:70  手机版
解决时间 2021-02-22 23:21
  • 提问者网友:伴风望海
  • 2021-02-22 09:25
java 中右移>>和逻辑右移>>的左操作数怎么运算的
最佳答案
  • 五星知识达人网友:人類模型
  • 2021-02-22 10:08
0xa2 16进制,对应的十进制是162,对应的二进制是10100010(32位,前面的0不显示)

10100010>>>2 = 00101000 这个正好是十进制的40

(byte) 0xa2 由于byte的最大值是127,所以byte162要取模,结果是-94,对应的二进制是:11111111111111111111111110100010
11111111111111111111111110100010 >> 2 = 11111111111111111111111111101000,即十进制-24

>>和>>>的区别是:
>> 带符号右移,高位补充符号,正0负1
>>>不带符号右移,高位补充正0
有上面的记过得知,(byte) 0xa2 = -24这是个负数
所以(byte) 0xa2>>>2
会很大追问谢谢这么详细,但是为什么(byte) 0xa2>>>2 输出的是1073741800,而(byte) 0xa2>>2只输出-24追答(byte) 0xa2 = (byte) 162 = -94 = 11111111111111111111111110100010
11111111111111111111111110100010 >> 2 =

11111111111111111111111111101000 = -24
原因是 右移后,高位用符号补齐,移动两位,那么高位补齐两位,由于是带符号移动,那么就补两个1

11111111111111111111111110100010 >>> 2 =
00111111111111111111111111101000 = 1073741800
原因是 右移后,高位不用符号而是用0补齐,移动两位,那么高位补齐两位,那么就补两个0,然后再转化成十进制,就是这个大数了.
自然科学中,人为的去手动转化会比较麻烦,但是计算机世界,转化起来非常容易.建议你理解就好,真实的项目中,需要这么转化的非常少。
需要时,可以用Integer.toBinaryString(100) 传唤成二进制
全部回答
  • 1楼网友:患得患失的劫
  • 2021-02-22 10:19
建议 要按2进制去看
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯