十进制 -> 二进制

将整数部分和小数部分分开处理

例:3.125(10)
其整数部分为11(2)

小数部分按照下面的步骤求解:

  1. 0.125 x 2 = 0.25 取0
  2. 0.250 x 2 = 0.50 取0
  3. 0.500 x 2 = 1.00 取1

当小数部分都为0的时候结束
得到.001(2),合并整数部分得11.001(2)

二进制 -> 十进制

  1. 十位:1 x 21 = 2
  2. 个位:1 x 20 = 1
  3. 十分之一位:0 x 2 -1 = 0
  4. 百分之一位:0 x 2 -2 = 0
  5. 千分之一位:1 x 2 -3 = 0.125

全部相加得到3.125(10)

浮点数的表示法——IEEE 754标准

将3.14分别按照32位单精度和64位双精度表示

整数部分11(2)

32位单精度:

小数部分
01 : 0.140000 x 2 = 0.280000 取0
02 : 0.280000 x 2 = 0.560000 取0
03 : 0.560000 x 2 = 1.120000 取1
04 : 0.120000 x 2 = 0.240000 取0
05 : 0.240000 x 2 = 0.480000 取0
06 : 0.480000 x 2 = 0.960000 取0
07 : 0.960000 x 2 = 1.920000 取1
08 : 0.920000 x 2 = 1.840000 取1
09 : 0.840000 x 2 = 1.680000 取1
10 : 0.680000 x 2 = 1.360000 取1
11 : 0.360000 x 2 = 0.720000 取0
12 : 0.720000 x 2 = 1.440000 取1
13 : 0.440000 x 2 = 0.880000 取0
14 : 0.880000 x 2 = 1.760000 取1
15 : 0.760000 x 2 = 1.520000 取1
16 : 0.520000 x 2 = 1.040000 取1
17 : 0.040000 x 2 = 0.080000 取0
18 : 0.080000 x 2 = 0.160000 取0
19 : 0.160000 x 2 = 0.320000 取0
20 : 0.320000 x 2 = 0.640000 取0
21 : 0.640000 x 2 = 1.280000 取1
22 : 0.280000 x 2 = 0.560000 取0
23 : 0.560000 x 2 = 1.120000 取1
……

显然,对0.14的转换是没有尽头的,对这样“无限不循环”的小数,只需按照单精度标准,保留23位。


.00100011110101110000101

合并起来就是
11.00100011110101110000101

按尾数的要求转换:
1.100100011110101110000101 x 21

阶码E = 1 + 127 = 128,有效数字M = 1.1……01

有效数字位因为1 <= M < 2,舍去整数位的1,存储小数点后24位的值
1001 0001 1110 1011 1000 0101 (第24位0舍1入)
1001 0001 1110 1011 1000 011

最后得到32位单精度模式下3.14在计算机中的存储形式(float类型)

0 1000 0000 1001 0001 1110 1011 1000 011

64位双精度:

对0.14进行转换,按照64位双精度标准,保留52位。

.0010001111010111000010100011110101110000101000111101

合并得
11.0010001111010111000010100011110101110000101000111101

按照尾数要求转换:
1.10010001111010111000010100011110101110000101000111101 x 2 1

阶码E = 1 + 1023 = 1024,有效数字M = 1.1……01

有效数字位:因为1 <= M < 2,舍去整数位的1,存储小数点后53位的值
1001 0001 1110 1011 1000 0101 0001 1110 1011 1000 0101 0001 1110 1(第53位0舍1入)
1001 0001 1110 1011 1000 0101 0001 1110 1011 1000 0101 0001 1111

最后得到64位双精度模式下3.14在计算机中的存储形式(double类型)

0 1000 0000 000 1001 0001 1110 1011 1000 0101 0001 1110 1011 1000 0101 0001 1111

总结

将十进制小数用IEEE 754表示时,若遇到诸如3.14这种“无限不循环”的小数,单精度模式下,十进制转二进制的循环进行到小数点后24位即可;双精度模式下,进行到小数点后53位即可。以“满1进位”的原则舍去多出来的第24位和第53位。

小数的十进制和二进数转换 “无限不循环”小数的IEEE 754表示的更多相关文章

  1. 实验03——java十进制转二、八、十六进制;打印'中'的十六进制;进制转换的api

    package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 创建时间:2020年7月16日 上午10:22: ...

  2. 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换

    一. 十进制与二进制之间的转换  (1) 十进制转换为二进制,分为整数部分和小数部分  ① 整数部分  方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权 ...

  3. 点分十进制IP校验、转换,掩码校验

    /***************************************************************************** * 点分十进制IP校验.转换,掩码校验 * ...

  4. java基础:进制详细介绍,进制快速转换,二维数组详解,循环嵌套应用,杨辉三角实现正倒直角正倒等腰三角,附练习案列

    1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...

  5. ORACLE十进制与十六进制的转换

    十进制与十六进制的转换 十进制-->十六进制 select to_char(100,'XX') from dual; 十六进制-->十进制select to_number('7D','XX ...

  6. ACM YTU 十进制与八进制的转换 (栈和队列) STL栈调用

    十进制与八进制的转换(栈和队列) Description 对于输入的任意一个非负十进制整数,利用栈打印输出与其等值的八进制数. Input 111 Output 157 Sample Input 14 ...

  7. c# 十进制转二、八、十六进制

    一.十进制转二.八.十.十六进制字符串 Convert.ToString(int decNum,int toBase); decNum为十进制字符串, toBase可以为2.8.10.16 如果要转换 ...

  8. ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 x: 十进制到二进制的转换

    http://acm.ocrosoft.com/problem.php?cid=1316&pid=49 题目描述 把十进制到二进制的转换. 输入 234 输出 11101010 样例输入 23 ...

  9. VIPKID:笔试题(数组中和为0的一对数的数量,十进制转二进制中1的个数)

    1. 求数组中的和为0 的一对数的数量 注意,需要用到set import java.util.Scanner; public class Main{ public static void main( ...

随机推荐

  1. JavaScript之创建对象的模式

    使用Object的构造函数可以创建对象或者使用对象字面量来创建单个对象,但是这些方法有一个明显的缺点:使用相同的一个接口创建很多对象,会产生大量的重复代码. (一)工厂模式 这种模式抽象了创建具体对象 ...

  2. nios eclipse提示LED_PIO_BASE没有声明,怎么回事?

    这是因为名字不一致引起的比如,在生成SOPC系统时,双击PIO(Parallel I/O)(在Avalon Modules -> Other 下),为系统添加输出接口,你没有把该组件改名成LED ...

  3. js基本数据类型之间的转换

    常见五大基本数据类型 1.number 2.string 3.boolean 4.undefined 5.null 一.转换为string ①调用toString() 方法 因为null和undefi ...

  4. java 线程基础篇,看这一篇就够了。

    前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...

  5. Linux触摸驱动分析

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 触摸屏基础知识 一.结构 上图是电阻触摸屏的一个侧面剖视图 ...

  6. bean的作用域和生命周期

    一.Bean作用域 二.生命周期 其中,这个类实现各种接口重写各种方法,会按bean的声明周期按序执行: 其中,自定义的初始化和自定义销毁的方法不是实现接口重写,而是成员方法,并且在装配bean即在x ...

  7. (7)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot Starter的介绍及使用

    ​ Spring Boot 的便利性体现在,它简化了很多烦琐的配置,这对于开发人员来说是一个福音,通过引入各种 Spring Boot Starter 包可以快速搭建出一个项目的脚手架推荐分布式架构源 ...

  8. 教你搞懂Jenkins安装部署!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用 ...

  9. PHP的内置WEB服务器

    在很多时候,我们需要简单的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来,但是去配 nginx 或者 apache 都很麻烦,其实,PHP CLI 已经提供了一个简单的测试服务 ...

  10. 记一次PHP的Invalid binding type问题

    首先说明下环境问题,新旧服务器的迁移.代码在老服务器运行没有任何问题.环境都是PHP7.3,结果新的服务器上流量导过来以后,就报出了如下问题: FastCGI sent in stderr: &quo ...