请问float值是如何表示的?(1 bit) 指数(8 bits) 尾数(23 bits) 小数点在哪里?

oracleperl 2021-01-20 04:16:39
符号(1 bit) 指数(8 bits) 尾数(23 bits)
第一位表示正负
小数点呢?在哪里?
指数部分如何对浮点数加权?如何和尾数对应起来?
谢谢
...全文
445 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracleperl 2021-01-22
  • 打赏
  • 举报
回复
引用 10 楼 qybao 的回复:
那是人类存储的思维,但计算机的思维不一样,计算机就变成1.0*10^-2,存1.0和指数-2,明白了吗?如果是0.05就是5.0*10^-2,也就是整数部分必须大于0,这是计算机的规则(除非你发明另一种不按规则出牌的计算机)。 上面举的例子是10进制的,如果是2进制,只有0和1,按照整数大于0的规则就注定了整数只能是1,所以尾数的第一位肯定是1就是这么来的。
我要保存一个0.00 何来1?
qybao 2021-01-22
  • 打赏
  • 举报
回复
看错了,你是说存0.00,我还以为是0.01 0是特殊值,浮点数有单独的定义 也就是说计算机的浮点存储,有针对0专门做了相应的规则 具体可以参考下 https://zh.wikipedia.org/wiki/IEEE_754
qybao 2021-01-22
  • 打赏
  • 举报
回复
引用 11 楼 oracleperl 的回复:
我要保存一个0.00 何来1?
你要谁来保存,你自己保存可以用0.01,但是计算机帮你保存就不是这样了,就会转成符合计算机的格式来保存 就好想你要保存一个汉子“问”,你认为计算是直接保存“问”这个字吗?如果是这样,那就不会有不同国家的编码问题了。 所以,你想存,和计算机能存,是两码是,就好比人家做不了的是,你还能逼着人家做吗?你要想让人家做好,你就要遵守人家的规则,否则人家就是给你做错。
  • 打赏
  • 举报
回复
浮点数的0只有符号位是0或者1,其余全0
oracleperl 2021-01-21
  • 打赏
  • 举报
回复
引用 5 楼 qybao 的回复:
[quote=引用 4 楼 oracleperl 的回复:] “浮点数存储格式” 举个例子? 我只知道浮点数float 32bits构成 ,如下: 符号(1 bit) 指数(8 bits) 尾数(23 bits) 实在不知道小数点在哪,也不知道指数(8 bits)是如何表示的,每一位分别啥意思
参考一下吧 https://www.jianshu.com/p/8ee02e9bb57d [/quote] 谢谢,图不能显示
qybao 2021-01-21
  • 打赏
  • 举报
回复
那是人类存储的思维,但计算机的思维不一样,计算机就变成1.0*10^-2,存1.0和指数-2,明白了吗?如果是0.05就是5.0*10^-2,也就是整数部分必须大于0,这是计算机的规则(除非你发明另一种不按规则出牌的计算机)。 上面举的例子是10进制的,如果是2进制,只有0和1,按照整数大于0的规则就注定了整数只能是1,所以尾数的第一位肯定是1就是这么来的。
oracleperl 2021-01-21
  • 打赏
  • 举报
回复
引用 8 楼 qybao 的回复:
看了一些资料, 所有的浮点数,都是1.XXXXXX * 2的N次方的形式 而浮点数的小数位数,是指数的值决定的? =》不是,因为这是二进制形式,要转成10进制才知道小数位数 大致好像是这样,但是没完全看懂,好像有四种规则,位数的第一位肯定是1?这些我都不理解。 《深入理解计算机系统》的有关于这方面的说明,但是没有例子,文字也很难懂,看不懂。 =》尾数第一位是1,这是默认规则,因为不允许0.xxxx以0开头的小数的方式(类似于十进制的科学计数法,整数大于0小于10),因为二进制只有0和1,又因为规定第一位不能位0,所以第一位只能是1,为了省存储空间,就可以把第一位省略掉(因为第一位必然是1)
没看懂,那我存储小数 0.01,难道第一位不是0吗?
qybao 2021-01-21
  • 打赏
  • 举报
回复
看了一些资料,
所有的浮点数,都是1.XXXXXX * 2的N次方的形式
而浮点数的小数位数,是指数的值决定的?
=》不是,因为这是二进制形式,要转成10进制才知道小数位数

大致好像是这样,但是没完全看懂,好像有四种规则,位数的第一位肯定是1?这些我都不理解。
《深入理解计算机系统》的有关于这方面的说明,但是没有例子,文字也很难懂,看不懂。
=》尾数第一位是1,这是默认规则,因为不允许0.xxxx以0开头的小数的方式(类似于十进制的科学计数法,整数大于0小于10),因为二进制只有0和1,又因为规定第一位不能位0,所以第一位只能是1,为了省存储空间,就可以把第一位省略掉(因为第一位必然是1)
oracleperl 2021-01-21
  • 打赏
  • 举报
回复
看了一些资料, 所有的浮点数,都是1.XXXXXX * 2的N次方的形式 而浮点数的小数位数,是指数的值决定的? 大致好像是这样,但是没完全看懂,好像有四种规则,位数的第一位肯定是1?这些我都不理解。 《深入理解计算机系统》的有关于这方面的说明,但是没有例子,文字也很难懂,看不懂。
qybao 2021-01-20
  • 打赏
  • 举报
回复
引用 4 楼 oracleperl 的回复:
“浮点数存储格式”
举个例子?
我只知道浮点数float 32bits构成 ,如下:
符号(1 bit) 指数(8 bits) 尾数(23 bits)

实在不知道小数点在哪,也不知道指数(8 bits)是如何表示的,每一位分别啥意思

参考一下吧
https://www.jianshu.com/p/8ee02e9bb57d
oracleperl 2021-01-20
  • 打赏
  • 举报
回复
引用 2 楼 qybao 的回复:
按照浮点数存储格式把数算出来就知道小数点在哪了
“浮点数存储格式” 举个例子? 我只知道浮点数float 32bits构成 ,如下: 符号(1 bit) 指数(8 bits) 尾数(23 bits) 实在不知道小数点在哪,也不知道指数(8 bits)是如何表示的,每一位分别啥意思
oracleperl 2021-01-20
  • 打赏
  • 举报
回复
引用 1 楼 赵4老师 的回复:
浮点数格式 http://bbs.csdn.net/topics/390676437
看不懂
qybao 2021-01-20
  • 打赏
  • 举报
回复
按照浮点数存储格式把数算出来就知道小数点在哪了
赵4老师 2021-01-20
  • 打赏
  • 举报
回复

70,012

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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