C语言:IEEE754十进制数转二进制单精度浮点数

更新时间:2023-07-26 19:58:49 阅读: 评论:0

C语⾔:IEEE754⼗进制数转⼆进制单精度浮点数
C语⾔:IEEE754⼗进制数转⼆进制单精度浮点数
1. 背景知识
1. IEEE754是由IEEE制定的有关浮点数的⼯业标准。针对于单精度浮点数,其公式如下,S为符号位,只占1位,为0表⽰正数,为1表
⽰负数。P为指数(阶码),⽤移码表⽰,占8位。M为尾数,⽤原码表⽰,占23位。
S P-127
X = (-1) * 1.M * 2
2. 浮点数规格化表⽰:当尾数的值不为0时,规定尾数域的最⾼有效位为1,不符合规定的则将阶码左移或右移⼩数点位置。
2. 程序代码
//编程环境:
//    操作系统:windows 7
//    编程⼯具:VS2017
//    编程语⾔:c/c++语⾔
#include "pch.h"
#include <iostream>
#include <stdio.h>
//整数转r进制
//integer:整数 radix:进制 result:结果数组 num:⽣成r进制所占位数
void D1toB(int integer, int radix, int result[], int &num)
{
int i, j, n;
for (i = 0; integer > 0; i++)//除r取余
{
result[i] = integer % radix;
integer = integer / radix;
}
num = i;//r进制位数
for (j = 0; j < i / 2; j++)//颠倒顺序
{
n = result[j];
result[j] = result[i - 1 - j];
result[i - 1 - j] = n;
}
}
//⼩数转r进制
//decimal:⼩数 radix:进制 result:结果数组 num:⽣成r进制所占位数
void D2toB(double decimal, int radix, int result[], int &num)
{
int i;
for (i = 0; decimal > 0 && i < 50; i++)//乘r取整
同学录留言
{
result[i] = decimal * radix;
decimal = decimal * radix;
decimal = decimal - int(decimal);
}
num = i;
}
int main()
int integer;//整数部分
double decimal;//⼩数部分
int s, p[8], m[50];//浮点数符号位,阶码数,尾数
while (true)
{
double number;//输⼊的浮点数
printf("请输⼊⼀个浮点数:");
scanf_s("%lf", &number);
getchar();
int i, j;
for (i = 0; i < 8; i++)//清零
{
p[i] = 0;爱心的名言
}
和风细雨是什么意思
for (i = 0; i < 50; i++)
{
m[i] = 0;
}
//确定符号位
if (number > 0)
{
s = 0;
}
el
{
s = 1;
number = -number;
}
/
/将浮点数分成整数和⼩数
integer = (int)number;
decimal = number - integer;
//分别将整数和⼩数转化成⼆进制
int m_n1, m_n2;
D1toB(integer, 2, m, m_n1);
D2toB(decimal, 2, m + m_n1, m_n2);
//规格化,计算阶数, 尾数
int pn = 0;//阶数
if (integer > 0)//⼩数点左移
{
pn = m_n1 - 1;//阶数
for (i = 0; i < 23; i++)//去掉⾸位默认的1
{
m[i] = m[i + 1];
}
}
el//⼩数点右移
{
for (i = 0; m[i] == 0; i++)
节字成语{
}
pn = -i -1;
for (j = 0; j < 23; j++)//去掉左边⽆效的0和第⼀个的1  {
m[j] = m[j + 1 + i];
}
}
//计算阶码
int p1[8], pn1;
D1toB(pn + 127, 2, p1, pn1);//阶数转⼆进制
if (pn1 < 8)//不⾜8位左边补0
for (j = 0; j < 8 - pn1; j++)
{
wananp[j] = 0;
}
for (int k = 0; k < pn1; k++)//得出完整p
{
p[j + k] = p1[k];
}
}
el
{
for (i= 0; i < 8; i++)//得出完整p
校园喜剧
{
p[i] = p1[i];
}
}
//输出s
printf("%d ", s);
严重反义词//输出p
for (i = 0; i < 8; i++)
白色指甲
{
printf("%d", p[i]);
}
printf(" "); //输出s
/
/输出m
for (i = 0; i < 23; i++)
{
printf("%d", m[i]);
}
printf("\n\n");
}
return 0;
}
提⽰:此程序为个⼈编写,结果仅作参考,若有不对之处,请指正。

本文发布于:2023-07-26 19:58:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1097790.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进制   浮点数   阶码   结果   尾数   单精度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图