ieee754标准的32位浮点规格化数是多少?

ieee754标准的32位浮点规格化数是多少?,第1张

ieee754标准的32位浮点规格化数是00111110110110000000000000000000。

第一,先转换为二进制数,第二,转化为规格化数,第三,按1823转化。

27/64=0.421875用二进制数表示为0.011011=1.1011×e^(-2)。

E=e+127=125用二进制数表示为01111101。

M=1011。

S=0。

SEM即:00111110110110000000000000000000。

单精度浮点数极值情况规定,最大的非规约数实际指数为-126,有偏移指数为0,指数域为00000000;最大的规约数实际指数为127,有偏移指数为254,指数域为11111110。

IEEE754标准的相关要求规定:

1、对于一个数,其二进制科学计数法表示下的指数的值,为指数的实际值;而根据IEEE 754标准对指数部分的编码的值,为浮点数表示法指数域的编码值。

2、指数偏差(表示法中的指数为实际指数减掉某个值)为 ,其中的e为存储指数的比特的长度。减掉一个值为指数必须是有号数才能表达很大或很小的数值,但是有号数通常的表示法——补码,将会使比较变得困难。

计算机组成原理:

若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如,十进制数可以表示成1.11×100,0.111×101,0.0111×102等多种形式。

答案:00111110110110000000000000000000

步骤:第一,先转换为二进制数,第二,转化为规格化数,第三,按1823转化

27/64=0.421875用二进制数表示为0.011011=1.1011×e^(-2)

E=e+127=125用二进制数表示为01111101

M=1011

S=0

SEM即:00111110110110000000000000000000

十进制数用0、1、2、3…9,这10个数。十进制是一种基于10的数字系统,是世界上使用最广泛的进位系统。

也就是说,小数点后加1,再加20,直到2,以此类推按重量计算,第一个重量是10的0次方,第二个重量是10的1次方……以此类推,第N位,10的N-1次方,等于每一位的值乘以每一位的权值的和。

扩展资料:

格式浮点数,也称为格式输出,是指指定格式中的浮点数。通常在显示统计报表时,数据存储需要格式化,常用的格式化功能有:e79fa5e9819331333365666165format, cast等。

扩展例子:将十进制数11.375表示为754标准存储格式(就是上文提到的一种规格化浮点数的国际标准)

11.375=+1011.011=+(1.011011)×2ˇ3=(-1)ˇS×(1.M)×2ˇe

可知S=0,包括隐藏位1的尾数1.M=1.011011=1.011 0110 0000 0000 0000 0000 e=3

E=e+127=130=011+01111111=10000010

则二进制数格式为

0 1000 0010 0110 1100 0000 0000 0000 0000

- ------------- ---------------------------

↑ ↑ ↑

S 阶码(8位) 尾数(23位)

整数部分用16除,反向取余数;小数部分用16乘,正向取整数。具体如下:

22÷16    =    1     余   6

1÷16    =    0     余   1

所以整数部分是16。小数部分

0.84x16   =   13(D)   . 44

0.44x16   =     7        .04

0.04x16   =     0        .64

0.64x16   =   10(A)   .24

0.24x16   =     3        .84

0.84x16   =   13(D)   . 44

...以后循环了,所以

22.84(10) = 16.D70A3D70A3...(16)

还可以先“用2除反向取余数”和“用2乘正向取整数”变成二进制,再从小数点开始左右每4位分开,前后不足4位的用0补齐,然后用对应的16进制符号直接写出来就可以了。22.84化成二进制是10110.11010111000010100011...→1'0110.1101'0111'0000'1010'0011→0001'0110.1101'0111'0000'1010'0011→16.D70A3...

要写代码,如下便可:

#include "stdio.h"

int main(void){

    double x=22.84,t

    char h[17]="0123456789ABCDEF", i,k

    printf("%g(10) = %x.",x,int(x))

    for(t=x-int(x),i=0i<10i++){

        k=int(t*=16),t-=k

        printf("%c",h[k])

    }

    printf("...(16)\n")

    return 0

}

C/C++没有提供以指针形式输出16进制数据的功能。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/117377.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-13
下一篇2023-03-13

发表评论

登录后才能评论

评论列表(0条)

    保存