A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 箫庐 黑马帝   /  2011-12-2 18:19  /  5058 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 箫庐 于 2011-12-5 13:18 编辑

比如 -8>>>2 ?

运行以下程序
               System.out.println("-8>>>2="+Integer.toBinaryString(-8>>>2));
                System.out.println("-8>>>2="+(-8>>>2));
得的结果是:


再打印
             System.out.println(Integer.toBinaryString(-2));
得的结果为上面的二进制表示的数。



什么原理啊?

无标题.png (898 Bytes, 下载次数: 173)

无标题.png

7 个回复

倒序浏览
-8>>>2后前面补得是两个0,即 0011 1111 1111 1111 1111 1111 1111 1110,转换为整数为1073741822
System.out.println("-8>>>2="+Integer.toBinaryString(-8>>>2));是将右移后的数转换成二进制数表示的字符串,再打印这个字符串
System.out.println(Integer.toBinaryString(-2));是一样的
System.out.println("-8>>>2="+(-8>>>2));就是打印计算结果1073741822

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
wsssx 2011-12-3 09:39:39
藤椅
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
在能整除的情况下 被移数/2^移动位数次幂=移动后的数
不能整除的情况下 我自己的结论是 向上取整 比如是-2.1就是-3
回复 使用道具 举报
赵燕燕 发表于 2011-12-3 02:13
-8>>>2后前面补得是两个0,即 0011 1111 1111 1111 1111 1111 1111 1110,转换为整数为1073741822
System. ...

那就是说-8>>>2的结果是1073741822而不是-2吗?
回复 使用道具 举报
这是十进制转化成了二进制,  取反加一,就得到了-2这个结果了。好像是机器数转化成真值吧?有点忘记了
回复 使用道具 举报
赵燕燕 黑马帝 2011-12-3 20:20:24
7#
箫庐 发表于 2011-12-3 12:42
那就是说-8>>>2的结果是1073741822而不是-2吗?

是的。-8>>2才等于-2
回复 使用道具 举报
箫庐 黑马帝 2011-12-5 08:44:52
8#
赵燕燕 发表于 2011-12-3 20:20
是的。-8>>2才等于-2

嗯.基本上明白了.

感觉是在控制台里面显示二进制的时候,前面的0都省略了导致这样的困惑.
不知道我的说法有没有问题.
谢谢大家热心解答~:)

评分

参与人数 1技术分 +1 收起 理由
admin + 1 问题已解决,建议把标题也改了!.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马