小数的十进制和二进数转换 “无限不循环”小数的IEEE 754表示
十进制 -> 二进制
将整数部分和小数部分分开处理
例:3.125(10)
其整数部分为11(2)
小数部分按照下面的步骤求解:
- 0.125 x 2 = 0.25 取0
- 0.250 x 2 = 0.50 取0
- 0.500 x 2 = 1.00 取1
当小数部分都为0的时候结束
得到.001(2),合并整数部分得11.001(2)
二进制 -> 十进制
- 十位:1 x 21 = 2
- 个位:1 x 20 = 1
- 十分之一位:0 x 2 -1 = 0
- 百分之一位:0 x 2 -2 = 0
- 千分之一位: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表示的更多相关文章
- 实验03——java十进制转二、八、十六进制;打印'中'的十六进制;进制转换的api
package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 创建时间:2020年7月16日 上午10:22: ...
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
一. 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权 ...
- 点分十进制IP校验、转换,掩码校验
/***************************************************************************** * 点分十进制IP校验.转换,掩码校验 * ...
- java基础:进制详细介绍,进制快速转换,二维数组详解,循环嵌套应用,杨辉三角实现正倒直角正倒等腰三角,附练习案列
1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...
- ORACLE十进制与十六进制的转换
十进制与十六进制的转换 十进制-->十六进制 select to_char(100,'XX') from dual; 十六进制-->十进制select to_number('7D','XX ...
- ACM YTU 十进制与八进制的转换 (栈和队列) STL栈调用
十进制与八进制的转换(栈和队列) Description 对于输入的任意一个非负十进制整数,利用栈打印输出与其等值的八进制数. Input 111 Output 157 Sample Input 14 ...
- c# 十进制转二、八、十六进制
一.十进制转二.八.十.十六进制字符串 Convert.ToString(int decNum,int toBase); decNum为十进制字符串, toBase可以为2.8.10.16 如果要转换 ...
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 x: 十进制到二进制的转换
http://acm.ocrosoft.com/problem.php?cid=1316&pid=49 题目描述 把十进制到二进制的转换. 输入 234 输出 11101010 样例输入 23 ...
- VIPKID:笔试题(数组中和为0的一对数的数量,十进制转二进制中1的个数)
1. 求数组中的和为0 的一对数的数量 注意,需要用到set import java.util.Scanner; public class Main{ public static void main( ...
随机推荐
- JavaScript之创建对象的模式
使用Object的构造函数可以创建对象或者使用对象字面量来创建单个对象,但是这些方法有一个明显的缺点:使用相同的一个接口创建很多对象,会产生大量的重复代码. (一)工厂模式 这种模式抽象了创建具体对象 ...
- nios eclipse提示LED_PIO_BASE没有声明,怎么回事?
这是因为名字不一致引起的比如,在生成SOPC系统时,双击PIO(Parallel I/O)(在Avalon Modules -> Other 下),为系统添加输出接口,你没有把该组件改名成LED ...
- js基本数据类型之间的转换
常见五大基本数据类型 1.number 2.string 3.boolean 4.undefined 5.null 一.转换为string ①调用toString() 方法 因为null和undefi ...
- java 线程基础篇,看这一篇就够了。
前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...
- Linux触摸驱动分析
测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 触摸屏基础知识 一.结构 上图是电阻触摸屏的一个侧面剖视图 ...
- bean的作用域和生命周期
一.Bean作用域 二.生命周期 其中,这个类实现各种接口重写各种方法,会按bean的声明周期按序执行: 其中,自定义的初始化和自定义销毁的方法不是实现接口重写,而是成员方法,并且在装配bean即在x ...
- (7)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot Starter的介绍及使用
Spring Boot 的便利性体现在,它简化了很多烦琐的配置,这对于开发人员来说是一个福音,通过引入各种 Spring Boot Starter 包可以快速搭建出一个项目的脚手架推荐分布式架构源 ...
- 教你搞懂Jenkins安装部署!
前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用 ...
- PHP的内置WEB服务器
在很多时候,我们需要简单的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来,但是去配 nginx 或者 apache 都很麻烦,其实,PHP CLI 已经提供了一个简单的测试服务 ...
- 记一次PHP的Invalid binding type问题
首先说明下环境问题,新旧服务器的迁移.代码在老服务器运行没有任何问题.环境都是PHP7.3,结果新的服务器上流量导过来以后,就报出了如下问题: FastCGI sent in stderr: &quo ...