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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 寐海流风 中级黑马   /  2014-6-11 21:41  /  1204 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 寐海流风 于 2014-6-21 15:01 编辑

关于移位运算符遇到的问题:
1、double lo = 39.2>>4;
2、int i = 4>>32;int m = 4>>33;int n = 4>>34;

在1条目中,为什么编译不能通过?既然一个double类型的数值是8字节的,也就是64位,为什么不能移位呢?浮点数是怎么存储的呢?
在2条目中,为什么打印结果分别为i=4、2、1?既然一个int类型的数值是4字节的,也就是32位,打印结果却不怎么好理解。(怎么感觉当移位超过31位后,又重新给个4继续移位呢?也就是说移位32其实是移位(32-32);移位33其实是移位(33-32);移位34是移位(34-32)。)——但是我用“>>>”来操作,也是同样结果呢?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

4 个回复

倒序浏览
昨天又查了一些资料,还是没完全明白。
回复 使用道具 举报
最大的问题:
计算机处理的01二进制,01二进制只能表示整数,浮点数怎么可以呢
回复 使用道具 举报
axuan 发表于 2014-6-12 11:53
最大的问题:
计算机处理的01二进制,01二进制只能表示整数,浮点数怎么可以呢 ...

查阅资料,自己理解是这样的:
double lo = 39.2;
整数部分39的二进制:100111
小数部分0.2的二进制:0011-0011-0011(就是0011循环,但是不知道循环到什么时候,难道是加上前面以消耗的位数,再表示完64位?;这里姑且取12位(int e = 12;))
那么39.2先表示成100111.001100110011
那么转换成10进制就是:100111001100110011*(2^e)

—————————
但是自己还是有些疑问。共同学习
回复 使用道具 举报
寐海流风 发表于 2014-6-12 13:41
查阅资料,自己理解是这样的:
double lo = 39.2;
整数部分39的二进制:100111

这个有点底层,不学了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马