文章目录

  • 二进制小数表示
  • 浮点数的基本概念
  • IEEE 32 与 IEEE 64
    • 符号部分的规则
    • 指数部分的规则
    • 尾数部分的规则
  • 总结

参考书籍 《程序是怎样跑起来的》

二进制小数表示

在计算机中,一切数据都是以二进制的形式进行表示,小数也不例外。
若将一个十进制的小数化为二进制小数,其简单规则如下图所示:

但是像1011.0011这样带小数点的表现形式,完全是纸面上的二进制数表现形式,在计算机内部是无法直接使用的,且计算机若采用定点数的形式来表示小数的话,则限制了其表示范围以及空间分配的不合理;
那么如何更加有效地描述小数呢?

浮点数的基本概念

在很多编程语言中都提供了两种表示小数的数据类型,分别是双精度浮点数和单精度浮点数。双精度浮点数类型用64位、单精度浮点数类型用32位来表示全体小数。
在C语言中,双精度浮点数类型和单精度浮点数类型分别用doublefloat来表示。这些数据类型都采用所谓的浮点数来表示小数。那么,浮点数到底是什么呢?

像0.12345×103和0.12345×10−10.12345×10^3 和0.12345×10^{-1}0.12345×103和0.12345×10−1这样使用与实际小数点位置不同的书写方法来表示小数的形式称为浮点数。
与浮点数相对的是定点数,使用定点数表示小数时,小数点的实际位置固定不变。例如,0.12345×103和0.12345×10−10.12345×10^3和0.12345×10^{-1}0.12345×103和0.12345×10−1用定点数来表示的话即为123.45和0.012345。

这样,浮点数是指用符号、尾数、基数和指数这四部分来表示的小数。因为计算机内部使用的是二进制数,所以基数自然就是2。

因此,实际的数据中往往不考虑基数,只用符号、尾数、指数这三部分即可表示浮点数。也就是说,64位(双精度浮点数)和32位(单精度浮点数)的数据,会被分为三部分来使用。

IEEE 32 与 IEEE 64

前面提到了,在计算机中实际上有两种浮点数标准,分别为双精度浮点数(64位)与单精度浮点数(32位),并且实际存储的内容为符号、指数以及尾数三个部分:


双精度浮点数能够表示的正数范围是4.94065645841247×10−3244.94065645841247×10^{-324}4.94065645841247×10−324 ~ 1.79769313486232×103081.79769313486232×10^{308}1.79769313486232×10308,负数范围是−1.79769313486232×10308-1.79769313486232×10^{308}−1.79769313486232×10308 ~−4.94065645841247×10−324-4.94065645841247×10^{-324}−4.94065645841247×10−324。
单精度浮点数能够表示的正数范围是1.401298×10−451.401298×10^{-45}1.401298×10−45 ~ 3.402823×10383.402823×10^{38}3.402823×1038,负数范围是−3.402823×1038-3.402823×10^{38}−3.402823×1038 ~ −1.401298×10−45-1.401298×10^{-45}−1.401298×10−45。
并且在这些范围中,有些数值是无法准确表示的,如 0.1 等,故而在使用浮点数做运算的时候需要额外留意。

符号部分的规则

符号部分的规则比较简单,用1表示负数,0表示正数。

指数部分的规则

指数部分采用"EXCESS"系统表现。
所谓EXCESS是“剩余的”的意思。简单来讲,就是在一个范围中找到一个中间值来表示0,那么小于这个中间值的为负值,大于这个中间值的为正值。
使用这种方法主要是为了表示负数时不使用符号位。在某些情况下,在指数部分,需要通过“负xx次幂”的形式来表示负数。EXCESS系统表现是指,通过将指数部分表示范围的中间值设为0,使得负数不需要用符号来表示。

也就是说,当指数部分是8位的单精度浮点数时,最大值11111111=255的1/2,即01111111=127(小数部分舍弃)表示的是0,指数部分是11位的双精度浮点数时,11111111111=2047的1/2,即01111111111=1023(小数部分舍弃)表示的是0。

尾数部分的规则

尾数部分使用的是将小数点前面的值固定为1的正则表达式。

具体来讲,就是将二进制数表示的小数左移或右移(这里是逻辑移位。因为符号位是独立的“)数次后,整数部分的第1位为1,其他位均为0)。
而由于第1位必须是1,第1位的1在实际的数据中无需保存。
并且不难理解的是,向左移n次则最终指数部分的实际值为 -n,向右移n次则最终指数部分的实际值为 n

总结

小数是以浮点数的形式在计算机中表示,而浮点数在计算机中的表示则通过特定的格式与规则来进行存储:


也正因如此,我们可以知道诸如0.1这种小数是无法在计算机中准确描述的,所以在遇到浮点数比较与计算等问题时,要额外注意出错的情况,能转换成整数运算的尽量转换成整数运算。

[计算机基础]浮点数在计算机中的表示相关推荐

  1. 中职计算机基础课堂传统教学,中职计算机基础知识教学创新

    刘静月 [摘要]信息化是当今世界经济和社会发展的趋势,以计算机技术为代表的信息技术已经成为拓展人类能力不可缺少的工具,具有越来越重要的地位.中等职业学校在培养未来的高素质劳动者和技能型人才时,使学生掌 ...

  2. 云班课计算机基础测试题,云班课在高职计算机基础微课教学中应用探究.doc

    云班课在高职计算机基础微课教学中应用探究 云班课在高职计算机基础微课教学中应用探究 摘要:本文基于云班课在高职计算机基础微课的教学应用,探讨了在移动"互联网+"课堂背景下,基于云班 ...

  3. 微课中职计算机基础,微课在中职计算机基础教学中的运用探究

    刘龙坤 [摘 要]在教育改革进一步深化的背景下,中职院校的发展也面临着严峻的挑战.对中职院校来说,要促进学生的全面发展,在改革下,就需要转变传统的教学模式,开展多样化的教学活动,来激发学生的学习兴趣, ...

  4. 计算机中带符号数的,大学计算机基础1.4_计算机中带符号数的表示方法.ppt

    大学计算机基础1.4_计算机中带符号数的表示方法 * 1.4 计算机中带符号数的表示方法 整数可以是正的或负的. 正整数是从0到正无穷,负整数是从负无穷到0. 为了高效地利用计算机的存储空间,人们设计 ...

  5. 景观专业结合计算机基础的论文,计算机基础应用论文

    计算机应用日益普及,且发展飞速,提高大学计算机基础课程的教学质量对高职院校教育质量工程有着非常重要的意义.下面是学习啦小编为大家整理的计算机基础应用论文,供大家参考. 计算机基础应用论文范文一:计算机 ...

  6. 北大文科生能选计算机专业么,文科计算机基础和文科计算机专题

    文科计算机基础和文科计算机专题 2018-01-16 文科计算机基础和文科计算机专题 课程编号:04831433.04831443            周学时      3 课程名称:文科计算机基础 ...

  7. 计算机使用的安全问题,大学计算机基础 教案 了解计算机使用中的安全问题(范文).doc...

    大学计算机基础 教案 了解计算机使用中的安全问题(范文) 第 PAGE \* Arabic 1 页第 PAGE \* Arabic 1 页 项目四 了解计算机使用中的安全问题 教 学 设 计 学科__ ...

  8. 医用计算机基础学习心得,计算机基础学习心得.doc

    计算机基础学习心得 计算机基础学习心得一:计算机基础学习心得 当今社会,到处充满机会与挑战.知识是我们面对这一切的筹码,而计算机知识则更为重要.如何在本科函授这样一种形式下,学好计算机课程,这是摆在我 ...

  9. 大学计算机基础教学大纲,大学计算机基础教学大纲

    计算机基础知识及试题资料 <大学计算机基础> (Fundamentals of Computer Technology) 课程代码:10410100 学位课程/非学位课程:非学位课程 学时 ...

  10. 计算机基础算术加法,计算机基础第二讲.ppt

    计算机基础第二讲 计算机的运算 算术运算:加.减.乘.除 逻辑运算:与.或.非 数据比较:大于.小于.等于.不等于.大于等于.小于等于 数据传送:输入.输出.赋值 二进制的算术运算 加法 0+0=0 ...

最新文章

  1. 如何利用大数据指导市场营销
  2. react-native 安卓支持 gif动态图
  3. 九度-1463-招聘会
  4. JGroups 入门实践(转)
  5. art-template-loader:template
  6. Python 案例001 (有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数)...
  7. How to use Chrome HAR save HTTP performance
  8. html如何显示上传进度条,HTML5 Ajax文件上传进度条如何显示
  9. MethodInvokingJobDetailFactoryBean的并发问题
  10. 自己动手做聊天机器人 一-涉及知识【转】
  11. 你知道海底捞在全国有多少家店吗?
  12. 【系列8】使用Dockerfile创建带MongoDB的Centos Docker镜像
  13. javaEE(3)_servlet基础
  14. spring aop原理
  15. c 语言 随机值的生成器,C 语言随机数生成器的实现分析
  16. python中迭代_python中的迭代什么意思
  17. 出现nginx: [emerg] unknown directive “]“ in /usr/local/openresty/nginx/conf/nginx.conf:74
  18. 房地产销售技巧:形成客户的信任心理
  19. 3.1 人生规划的秘密:一个人活成一支队伍
  20. Linux下使用游戏手柄

热门文章

  1. 在VS Code上搭建C/C++环境
  2. phpcms一键清理数据后完整找回数据
  3. python 类调用不存在的方法_找不到Python方法,但在类中定义
  4. 云数据库polarDB搭建流程!超详细图文教程。秒杀mysql!
  5. IETester汉化文件下载
  6. java 整型数组定义_JAVA数组的定义及用法
  7. SSM+基于微信小程序的航空售票管理系统 毕业设计-附源码191111
  8. 苹果可以用android流量监控,iPhone怎么看流量统计?
  9. 第四周助教工作总结——NWNU李泓毅
  10. 疑问代词who和whom的用法