教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

浮点数的二进制表示

来源:网络收集 时间:2026-09-13
导读: 浮点数的二进制表示 课题报告 学生姓名: 冯瑜 班 级: 071132 院 系: 机械与电子信息学院 指导老师: 杨勇 2016年3月12日 一、浮点数二进制表示的意义 浮点数表示形式使用“符号—数值”格式,在编码前增加了指数偏移,“符号—数值”格式对于浮点算术运算

浮点数的二进制表示 课题报告

学生姓名: 冯瑜

班 级: 071132

院 系: 机械与电子信息学院

指导老师: 杨勇

2016年3月12日

一、浮点数二进制表示的意义

浮点数表示形式使用“符号—数值”格式,在编码前增加了指数偏移,“符号—数值”格式对于浮点算术运算需要的算法更为方便,偏移后的指数简化了用于操作数欲对齐中指数比较的硬件。

二、浮点数在计算机内存中的存储格式

对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用 32bit,double数据占用 64bit。不论是float类型还是double类型,在计算机内存中的存储方式都是遵从IEEE规范,float遵从的是IEEE R32.24,而double遵从的是R64.53。

无论是单精度还是双精度,在内存存储中都分为3个部分:

1)符号位(Sign):0代表正,1代表为负;

2)指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储;

3)尾数部分(Mantissa):尾数部分;

float的存储方式:

double 型的存储方式:

四、笔算转换方法

1. 整数部分25,二进制为11001; 小数部分0.1, 二进制是.00001100110011001100……,连起来从第一个1数起取24位(后面补0): 11001. 0000110011001100110,这部分是有效数字。

2. 把小数点前后两部分连起来再取掉头前的1,就是尾数: .100100001100110011001100

3. 把小数点移到第一个1的后面,左移了1位, 加上偏移量127:127+4=131,二进制是10000011,这是阶码。

4. 负数符号位是1。把符号位,阶码和尾数连起来:

1 10000011 100100001100110011001100,因为截取的有限位,因此要判断下一位是1或0,舍入后为

1 10000011 100100001100110011001101.

五、代码实现的程序流程图

图1 程序流程图

六、程序代码

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

int i;

float src = -25.1; //要转化的十进制数

long dest;

memcpy(&dest,&src,sizeof(long)); //类型转换,方便后面转化为二进制

printf("%5.2f\n",src);

printf("符号位 阶码 尾数\n");

for(i=0 ; i<32 ; i++){

if((dest<<i)&0x800000000) printf("1"); //转化成32位二进制形式

else printf("0");

if(i==0 || i==8) printf(" ");

}

return 0;

}

七、运行结果

图2 运行结果图

八、代码说明

采用从右至左逐位相与的方法实现二进制转换,选0x800000000这个35位二进制数保证了可转化十进制的范围,转换前使用函数memcpy。

1、函数原型:void *memcpy(void *dest, const void *src, size_t n);

2、功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。

3、所需头文件:C语言:#include<string.h>

4、返回值:函数返回指向dest的指针。

该函数可以拷贝任何类型的对象,因为函数的参数类型是void*(未定义类型指针),也就是说传进去的实参可以是int*,short*,char*等等,但是由于函数拷贝的过程是一个字节一个字节的拷贝的,所以实际操作的时候要把void*强制转化为char*,这样在指针加的时候才会保证每次加一个字节。所以既不能改变首地址,又要满足累积赋值(就是赋值的时候要从赋过值的地方开始向下一个内存块赋值,想到指针加),所以想到把指针加写到函数参数里面,需要充分了解memcpy的实现过程,里面是一个一个字符的赋值,想连续赋值,就要把指针指向连续的内存的首地址。

5、此处用memcpy而不用strcpy的原因:

1)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2)复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

3)用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

(补充:将单精度内存数据转化为十进制数)

例如 10000010 01000100000000000000000

第一步:符号位为0,表示是正数;

第二步:指数位为10000010,换算成十进制为130,所以指数为130-127=3;

第三步:尾数位为01000100000000000000000,换算成十进制为 (1+1/4+1/64); 所以相应的十进制数值为:2^3*(1+1/4+1/64)=8+2+1/8=10.125

…… 此处隐藏:354字,全部文档内容请下载后查看。喜欢就下载吧 ……
浮点数的二进制表示.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1441886.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)