小数的十进制和二进数转换 “无限不循环”小数的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( ...
随机推荐
- AN INTEGER FORMULA FOR FIBONACCI NUMBERS
https://blog.paulhankin.net/fibonacci/ This code, somewhat surprisingly, generates Fibonacci numbers ...
- Linux内核编译配置脚本
环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...
- sqlite数据库的基本用法及C语言的API接口简介
********************sqlite数据库******************** http://www.sqlite.org/c3ref/intro.html 1-- 安装数据库: ...
- poll?transport=longpoll&connection...烦人的请求c
1.问题描述: 最近使用miniui做了一个后台管理系统,打开浏览器调试时,总发现一堆无关的请求,结构大致是:poll?transport=longpoll&connection.....一直 ...
- <input type="file">如何实现自定义样式
利用样式覆盖来实现效果:先看下原本和改变后的样式 1 <!doctype html> 2 <html> 3 <head> 4 <title>file自定 ...
- 【第二篇】- Git 安装配置之Spring Cloud直播商城 b2b2c电子商务技术总结
Git 安装配置 在使用Git前我们需要先安装 Git.Git 目前支持 Linux/Unix.Solaris.Mac和 Windows 平台上运行. Git 各平台安装包下载地址为:http://g ...
- lombok时运行编译无法找到get/set方法 看这篇就够了
今天项目突然运行的时候报错,提示找不到get和set方法,这个时候我就检查了项目,在编译器(idea)是没有报错的.说明编译没问题,只是运行过不去. 后面就开始用我的方法解决这个问题,一步一步排查. ...
- 有关类朋友圈设计(3) -- 数据库设计&现有技术&流程设计
在写之前,先说说当前的系统架构吧 spring cloud + zuul + eureka + oauth2 + redis + rabbitMq 这个系统是由我搭建的,当时采用的springClou ...
- 【C++周报】第二期 2021-8-19
这次我们照样看一道题.个人认为比上一次的简单. https://vijos.org/p/1130 先说方法,动态规划,你能想到什么? "在它的左边加上一个自然数,但该自然数不能超过原数的一半 ...
- PHP中的文件系统函数(二)
这次我们来学习的是一些不是太常用,但却也非常有用的一些函数.它们中有些大家可能见过或者使用过,有一些可能就真的没什么印象了.它们都是 PHP 中文件系统相关操作函数的一部分.存在即合理,或许只是我们的 ...