浮点数的二进制表示,要求说明通俗,详细点,谢谢了 100

看到c语言中的浮点类型的二进制表示公式为N=(+-)2的E次方乘以M,E为指数,M为尾数。搞不明白这个公式还有换算的方法,也看了一些说偏移什么的,请大师专业详细慢慢说明下,谢谢了。 以0.5为例子。0.4为一个例子,0.3为个例子让我们这些菜鸟看懂点,什么是符... 展开
疑问:1.10001110100101111000111这个公式是怎么得到的,我看了下1100.和1.100,小数点向右边挪动了3位,而1.100则多了乘以2的3次方,可否这样理解,向右边移动N位置则 2*N次方,向左移动边则2*(-N次方),这个就是指数吗?疑问2:1100.01110100101111000110101变成了1.10001110100101111000111的2进制再乘以2的3次方,1100.的中间一个是110,而1.100之后的则是111,怎么变成这个数字了
 我来答

答题抽奖

首次认真答题后

即可获得3次抽奖机会,100%中奖。

更多问题
2018-03-31 最佳答案

浮点数的二进制表示:

  • 例如:-12.5 转为单精度二进制表示

  • 12.5: 

  • 整数部分12,二进制为1100; 小数部分0.5, 二进制是.1,先把他们连起来,从第一个1数起取24位(后面补0): 

  • 1100 .1 000 00000000 00000000 

  • 这部分是有效数字。(把小数点前后两部分连起来再取掉头前的1,就是尾数) 

  • 把小数点移到第一个1的后面,需要左移3位(1.1001 000 00000000 0000 0000 *2^3 ), 加上偏移量127:127+3=130,二进制是10000010 ,这是阶码。 

  • -12.5是负数,所以符号位是1。把符号位,阶码和尾数连起来。注意,尾数的第一位总是1,所以规定不存这一位的1,只取后23位: 
    1 10000010 10010000000000000000000 

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

二进制数(binaries)是逢2进位的进位制,0、1是基本算符;计算机运算基础采用二进制。电脑的基础是二进制。电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。

浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。

素颜以对2017

采纳率:99% 擅长: 暂未定制

其他回答

单精度浮点数的组成,一位符号位,然后八位指数位,然后23位小数位(整数部分固定为1)

0.5表示为
0 01111110 00000000000000000000000
0:符号
01111110:移码表示的-1
00000000000000000000000:就是二进制的1.00000000000000000000000
于是这玩意儿就是 1.00000000000000000000000 x 2^(-1)

0.4表示为
0 01111101 10011001100110011001101
0:符号
01111101:移码表示的-2
10011001100110011001101:二进制的1.10011001100110011001101,换成十进制约为就是1.60000002384185791015625
于是这玩意儿是 1.60000002384185791015625 x 2^(-2)

0.3表示为
0 01111101 00110011001100110011010
0:符号
01111101:移码表示的-2
00110011001100110011010:换成十进制就是1.2000000476837158203125
于是这玩意儿就是 1.2000000476837158203125 x 2^(-2)

移码是什么?就是二进制表示的数字减去127……
这里是八位,最高位的1表示128,于是就取最高位0剩下都1的表示0,往后就是1
简单说 10000000 是1,01111111是0,01111110是-1,10000001是2

二进制小数表示法就是小数点后第一位的位权是0.5,第二位0.25,第三位0.125,类推
二进制0.1就是十进制0.5,二进制0.01就是十进制0.25,二进制0.11就是十进制0.75,二进制的1.1就是十进制的1.5

所以浮点数的1你觉得是什么?XD
展开
本回答被网友采纳
空雪梦见 | 推荐于2018-02-26 12:21:45
评论

追问
12.456,第一个步骤12用辗转法得到1100看懂了,小数部分0.456看了下网上小数转换二进制部分看懂了点,是不是0.4560*2=0.9120,取前面的0.一直乘下去,去整数部分作为二进制,取23次部分为精度。 第三部分12.456=1100.01110100101111000110101的2进制表达等于下面的1.10001110100101111000111的2进制再乘以2的3次方
追答
没错乘以除以2就是左右移动小数点 就跟十进制乘除10一样 还有最后一位是误差 只要不是全零就是1 
剩下的就是化为ieee754了 其实用c语言以上过程是编译器和cpu干的
比如
float f=12.456;
unsigned int i=*((int *)(&f));
然后你就会发现 i=010000010M;
本回答被提问者采纳
南瓜猪的的的 | 发布于2013-11-30
评论

为您推荐:

×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消