system.out.println(-8>>>2),输出1073741822。求解释。谢谢。

magic_kid_2010 2012-10-21 07:18:07
system.out.println(-8>>>2),输出1073741822。求解释。谢谢。
...全文
500 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Utopia 2012-10-22
  • 打赏
  • 举报
回复
-8: 1111 1111 1111 1111 1111 1111 1111 1000 或者0xfffffff8
无符号右移两位: 0011 1111 1111 1111 1111 1111 1111 1110 或者0x3ffffffe
licip 2012-10-21
  • 打赏
  • 举报
回复
你把-8转化为32位的二进制数,然后无符号右移2位,再把它计算出来结果为:1073741822
liuhuabai100 2012-10-21
  • 打赏
  • 举报
回复
在JAVA中 int是一个含符号的变量
0x0~0x7FFFFFFF为正数,0x80000000~0xFFFFFFFF为负数。
其中0xFFFFFFFF表示的是-1,-8是用0xFFFFFFF8表示的。
把这个数无符号右移2位,就是0x3FFFFFFE;
把这个数有符号右移2位,就是0xFFFFFFFE;
(用计算器把它转换一下吧?)
ldq67123 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

你把-8转化为32位的二进制数,然后无符号右移2位,再把它计算出来结果为:1073741822

-8的二进制表示为:0000 0000 0000 0000 0000 0000 0000 1000?
右移两位为0000 0000 0000 0000 0000 0000 0000 0010,不是等于-2了吗?
它中间是三个>>>,不是两个>>。如果是两个>>……
[/Quote]
我怎么按计算器也按不出你给的二进制值,负数补码最高位是1
magic_kid_2010 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你把-8转化为32位的二进制数,然后无符号右移2位,再把它计算出来结果为:1073741822
[/Quote]
-8的二进制表示为:0000 0000 0000 0000 0000 0000 0000 1000?
右移两位为0000 0000 0000 0000 0000 0000 0000 0010,不是等于-2了吗?
它中间是三个>>>,不是两个>>。如果是两个>>,答案就是-2.
我发现一个问题:|-2| + 1073741822 = 1073741724 = 2^30。不知道是否是巧合。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧