首页

文章

二进制中浮点数怎么表示

发布网友 发布时间:2022-04-20 03:17

我来回答

3个回答

热心网友 时间:2023-05-19 18:42

目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:
符号位 阶码 尾数 长度
float 1 8 23 32
double 1 11 52 64 以下通过几个例子讲解浮点数如何转换为二进制数例一:已知:double类型38414.4。求:其对应的二进制表示。分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:
最高位63位是符号位,1表示该数为负,0表示该数为正;
62-52位,一共11位是指数位;
51-0位,一共52位是尾数位。

步骤:按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。
把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理:
0.4=0.5*0+0.25*1+0.125*1+0.0625*0+……
实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。
如果你够耐心,手工算到53位那么因该是:38414.4(10)=1001011000001110.0110011001100110011001100110011001100(2)科学记数法为:1.001011000001110 0110011001100110011001100110011001100,右移了15位,所以指数为15。或者可以如下理解:1.001011000001110 0110011001100110011001100110011001100×2^15
于是来看阶码,按IEEE标准一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为负,为了便于计算,规定都先加上1023(2^10-1),在这里,阶码:15+1023=1038。二进制表示为:100 00001110;
符号位:因为38414.4为正对应 为0;
合在一起(注:尾数二进制最高位的1不要):
01000000 11100010 11000001 110 01100 11001100 11001100 11001100 11001100 例二:已知:整数3490593(16进制表示为0x354321)。求:其对应的浮点数3490593.0的二进制表示。 解法如下:先求出整数3490593的二进制表示: H: 3 5 4 3 2 1 (十六进制表示) B: 0011 0101 0100 0011 0010 0001 (二进制表示) │←──────21─────→│ 即: 1.1010101000011001000012×221可见,从左算起第一个1后有21位,我们将这21为作为浮点数的小数表示,单精度浮点数float由符号位1位,指数域位k=8位,小数域位(尾数)n=23位构成,因此对上面得到的21位小数位我们还需要补上2个0,得到浮点数的小数域表示为: 1 0101 0100 0011 0010 0001 00 float类型的偏置量Bias=2k-1-1=28-1-1=127,但还要补上刚才因为右移作为小数部分的21位,因此偏置量为127+21=148,就是IEEE浮点数表示标准: V = (-1)s×M×2E E = e-Bias中的e,此前计算Bias=127,刚好验证了E=148-127=21。 将148转为二进制表示为10010100,加上符号位0,最后得到二进制浮点数表示1001010010101010000110010000100,其16进制表示为: H: 4 A 5 5 0 C 8 4 B: 0100 1010 0101 0101 0000 1100 1000 0100 |←──── 21 ─────→ | 1|←─8 ─→||←───── 23 ─────→ | 这就是浮点数3490593.0(0x4A550C84)的二进制表示。 例三:0.5的二进制形式是0.1它用浮点数的形式写出来是如下格式 0 01111110 00000000000000000000000
符号位 阶码 小数位正数符号位为0,负数符号位为1阶码是以2为底的指数小数位表示小数点后面的数字
下面我们来分析一下0.5是如何写成0 01111110 00000000000000000000000
首先0.5是正数所以符号位为0再来看阶码部分,0.5的二进制数是0.1,而0.1是1.0*2^(-1),所以我们总结出来:要把二进制数变成(1.f)*2^(exponent)的形式,其中exponent是指数而由于阶码有正负之分所以阶码=127+exponent;即阶码=127+(-1)=126 即 01111110余下的小数位为二进制小数点后面的数字,即00000000000000000000000
由以上分析得0.5的浮点数存储形式为0 01111110 00000000000000000000000 注:如果只有小数部分,那么需要右移小数点. 比如右移3位才能放到第一个1的后面, 阶码就是127-3=124.例四 (20.59375)10 =(10100.10011 )2

首先分别将整数和分数部分转换成二进制数:

20.59375=10100.10011

然后移动小数点,使其在第1,2位之间

10100.10011=1.010010011×2^4 即e=4

于是得到:

S=0, E=4+127=131, M=010010011

最后得到32位浮点数的二进制存储格式为:

0100 1001 1010 0100 1100 0000 0000 0000=(41A4C000)16 例五:
-12.5转为单精度二进制表示
12.5:
1. 整数部分12,二进制为1100; 小数部分0.5, 二进制是.1,先把他们连起来,从第一个1数起取24位(后面补0):
1100.10000000000000000000
这部分是有效数字。(把小数点前后两部分连起来再取掉头前的1,就是尾数)
2. 把小数点移到第一个1的后面,需要左移3位(1.10010000000000000000000*2^3), 加上偏移量127:127+3=130,二进制是10000010,这是阶码。
3. -12.5是负数,所以符号位是1。把符号位,阶码和尾数连起来。注意,尾数的第一位总是1,所以规定不存这一位的1,只取后23位:
1 10000010 10010000000000000000000
把这32位按8位一节整理一下,得:
11000001 01001000 00000000 00000000
就是十六进制的 C1480000.

例六:2.025675
1. 整数部分2,二进制为10; 小数部分0.025675, 二进制是.0000011010010010101001,先把他们连起来,从第一个1数起取24位(后面补0):
10.0000011010010010101001
这部分是有效数字。把小数点前后两部分连起来再取掉头前的1,就是尾数: 00000011010010010101001
2. 把小数点移到第一个1的后面,左移了1位, 加上偏移量127:127+1=128,二进制是10000000,这是阶码。
3. 2.025675是正数,所以符号位是0。把符号位,阶码和尾数连起来:
0 10000000 00000011010010010101001
把这32位按8位一节整理一下,得:
01000000 00000001 10100100 10101001
就是十六进制的 4001A4A9.

例七:
(逆向求十进制整数)一个浮点二进制数手工转换成十进制数的例子:
假设浮点二进制数是 1011 1101 0100 0000 0000 0000 0000 0000
按1,8,23位分成三段:
1 01111010 10000000000000000000000
最后一段是尾数。前面加上"1.", 就是 1.10000000000000000000000
下面确定小数点位置。由E = e-Bias,阶码E是01111010,加上00000101才是01111111(127),
所以他减去127的偏移量得e=-5。(或者化成十进制得122,122-127=-5)。
因此尾数1.10(后面的0不写了)是小数点右移5位的结果。要复原它就要左移5位小数点,得0.0000110, 即十进制的0.046875 。
最后是符号:1代表负数,所以最后的结果是 -0.046875 。

注意:其他机器的浮点数表示方法可能与此不同. 不能任意移植。 再看一例(类似例七):比如:53004d3e二进制表示为:01010011000000000100110100111110按照1个符号 8个指数 23个小数位划分0 10100110 00000000100110100111110正确的结果转出来应该是551051722752.0该怎么算?好,我们根据IEEE的浮点数表示规则划分,得到这个浮点数的小数位是:

00000000100110100111110

那么它的二进制表示就应该是:

1.000000001001101001111102 × 239

这是怎么来的呢? 别急,听我慢慢道来。
标准化公式中的M要求在规格化的情况下,取值范围1<M<(2-ε)正因为如此,我们才需要对原始的整数二进制表示做偏移,偏移多少呢?偏移2E。
这个“E”怎么算?上面的239怎么得来的呢?浮点数表示中的8位指数为就是告诉这个的。我们知道:
E = e-Bias
那么根据指数位:101001102=>16610
即e=166,由此算出E=e-Bias=166-127=39,就是说将整数二进制表示转为标准的浮点数二进制表示的时候需要将小数点左移39位,好,我们现在把它还原得到整数的二进制表示:1 00000000100110100111110 00000000000000001│←───── 23─────→│←─── 16───→│

23+16=39,后面接着就是小数点了。
拿出计算器,输入二进制数1000000001001101001111100000000000000000
转为十进制数,不正是:551051722752么!

通过这例六例七,介绍了将整数二进制表示转浮点数二进制表示的逆过程,还是希望大家不但能掌握转化的方法,更要理解转化的基本原理。

热心网友 时间:2023-05-19 18:42

二进制中浮点数浮点表示例子:

浮点二进制数是:1011 1101 0100 0000 0000 0000 0000 0000

按1,8,23位分成三段:
1 01111010 10000000000000000000000

最后一段是尾数。前面加上"1", 就是 1.10000000000000000000000

下面确定小数点位置。阶码是01111010,加上00000101才是01111111(127),所以他减去127的偏移量得-5。

要注意其他机器的浮点数表示方法可能不同.,不能任意移植。

热心网友 时间:2023-05-19 18:43

所有进制的浮点数都是直接加小数点。二进制小数的表示就是1110.1101
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 56.625十进制浮点数转换成二进制? 10进制浮点数怎么转2进制,方法 浮点数如何转成二进制数?也就是用二制数如何来表... c语言 单精度浮点数是怎样转换成2进制数 如何把浮点数转换为二进制数 计算机组成原理的题,浮点数,转化为二进制真值,... 汇编语言:如何将浮点数转换为二进制 浮点数转换为二进制,小数部分怎么转换,请教大家 浮点数转换为二进制,小数部分怎么转换? 浮点数的二进制表示 PS标尺怎么使用 江淮瑞风正时怎么对 江淮瑞风汽油发动机正时怎么对 瑞风19t正时链条对法 江淮瑞风柴油版正时怎么对 江淮瑞风1.9T柴油机链条正时怎么对 江淮瑞风1.9t柴油版正时链分的大小吗 江淮瑞风的正时怎么对,有图的发图,谢! 江淮瑞风1.9T发动机凸轮轴 正时跟电子泵正时怎么对... 江淮瑞风正时皮带怎么对??? 请问在matlab中如何将浮点数转化为二进制? 计算机组成原理——浮点数表示方法 静态变量 浮点数转化为二进制 函数调用 C++编程 32位的浮点数在转化成2进制的各个部分是如何让分配的 c++ 如何将一个浮点数转换为二进制表示 有哪位会在MATLAB中把浮点数转为二进制数?急!!... 从零开始学会计,到考完会计证,最快要多久的时间? 会计证好考吗 怎么考 需要学多长时间 会计好学吗?要是报个培训班多久能学会?要是会计... 中级会计师考试需要学习多长时间 考会计证好考吗。大概得几个月下来。一般多少钱? 学会计要多久多少钱… 考会计证好考吗。大概得几个月下来。一般多少钱 初级会计职称好考吗?大概得学多长时间可以考过 学会计难吗? 初级会计备考一般多久 会计好学吗?会计证好不好考? 零基础自学会计初级需多长时间 学习会计要多久? 学会计到底难不难,该从何入手?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com