浮点数的二进制表示
浮点数的二进制表示 课题报告
学生姓名: 冯瑜
班 级: 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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




