做药公司的网站前置审批,狼人在线观看视频人在线,永州网站建设,企业的网站开发费用摊销几年文章目录 一、基础知识1.1 十进制与二进制的转换i 十进制整数转二进制ii 十进制小数转二进制 1.2 科学记数法1.3 计算机中的浮点数科学记数法 二、C语言的浮点数2.1 浮点数表示方法2.2 浮点数的存储方式IEEE 754标准 2.3 举例子i 正指数ii 负指数 浮点数的大小范围 一、基础知识… 文章目录 一、基础知识1.1 十进制与二进制的转换i 十进制整数转二进制ii 十进制小数转二进制 1.2 科学记数法1.3 计算机中的浮点数科学记数法 二、C语言的浮点数2.1 浮点数表示方法2.2 浮点数的存储方式IEEE 754标准 2.3 举例子i 正指数ii 负指数 浮点数的大小范围 一、基础知识
1.1 十进制与二进制的转换
i 十进制整数转二进制
辗转除二方向取余法把十进制数字辗转除以2直到商为0为止然后反向由下往上读读取余法.
例如十进制17转换为二进制
17/2 8 ... 1
8/2 4 ... 0
4/2 2 ... 0
2/2 1 ... 0
1/2 0 ... 1把得到的余数由下往上读十进制17的二进制表示形式为 10001
ii 十进制小数转二进制
十进制的小数乘以2取乘积的整数部分作为二进制的一位乘积的剩余小数继续乘以2直至不存在剩余小数为止。 即十进制的小数乘以2记录下乘积的整数部分接着判断乘积是否含有小数若含有小数把小数部分继续乘以2在积累下乘积的整数部分直到乘积是整数为止。
例如十进制0.25可以转换为二进制
0.25 x 2 0.5 00.5 x 2 1 1故十进制0.25 的二进制表示形式 01
例如十进制0.2可以转换为二进制
0.2 x 2 0.4 00.4 x 2 0.8 00.8 x 2 1.6 10.6 x 2 1.2 10.2 x 2 0.4 00.4 x 2 0.8 00.8 x 2 1.6 1
.........(乘积永远也得不到整数)故十进制0.2 的二进制表示形式 0011001....这也是浮点数在计算机中存储会出现精度丢失的原因。
1.2 科学记数法
科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式1≤|a|10a不为分数形式n为整数这种记数法叫做科学记数法。
例如199714000000001.99714×10^13。计算器或电脑表达10的幂是一般是用E或e也就是1.99714E1319971400000000。
1.3 计算机中的浮点数科学记数法
浮点数顾名思义是指 小数点可以任意浮动的数字。
浮点数和整数有所不同那么在计算机中是如何存储浮点数的呢
我们引入科学记数法的概念科学记数法是指把一个数字表示成a与10的n次幂相乘的形式。在我们用科学记数法记录较大的或较小的数字时可以大大减少记录数字所需要的空间和时间。
在计算机中浮点数的存储方式与科学记数法很相似它把一个数字表示成了a与2的n次幂相乘的形式。
如8.25 换算成二进制 (方法是:整数部分除二取余小数部分乘二取整)8 - 10000.25 - 018.25 的二进制是 1000.01再用科学计算法表示1.00001 * 2^3任何小数都可以用 1.xxxx * 2^n表示1和小数点和指数2都是一样xxxxx尾数部分 和n(指数部分)不一样的所以计算机中存 符号位 尾数部分指数部分就可以了二、C语言的浮点数
2.1 浮点数表示方法
一般表示法 指数表示法 十六进制指数表示法 略
2.2 浮点数的存储方式
计算机中的浮点数的存储方式遵循IEEE 754标准存储格式分为三部分符号部分、尾数部分0.1 尾数 1和指数部分。
IEEE 754标准
IEEE 754标准采用的浮点数的格式 ms为符号位表示浮点数的符号。1为负数0为正数 E为指数部分需加上127偏移量。 M是尾数部分尾数指小数点后面的部分。注意在对阶规格化后因为小数点前面的整数部分必须为1所以IEEE754标准不会存储这个1即指存小数点后的数值
IEEE 754标准规定常用的浮点数格式有短浮点数单精度、float、长浮点数双精度、double型、临时浮点数。
短浮点数数符占1位阶码占8位以2为底用移码表示阶码偏置值为127阶码全1表示无限大E的范围是1~254空出全0表示非规格化数尾数部分为23位。
长浮点数数符占1位阶码占11位以2为底用移码表示阶码偏置值为1023阶码全1表示无限大E的范围是1~2046空出全0表示非规格化数尾数部分为52位。
2.3 举例子
i 正指数
十进制单精度浮点数8.25的二进制表示是怎么样的呢如下
我们由上可知十进制8.25在计算机中的科学记数法的表示形式是1.00001 * 2^3。 符号部分为0指数部分为3 127尾数部分为00001
float num 8.25;符号位 指数部分 尾数部分float类型 1bit 8bit 23bit8.25 0 3 00001符号位 1为负数0为正数指数部分: 3127 1000 0010尾数部分 00001 低位补0 00001 000000000...000008.25 在计算机中存储的形式是 : 0 1000 0010 00001.......000000ii 负指数
十进制单精度浮点数0.2的二进制表示是怎么样的呢
首先将十进制数0.2转换为二进制数
0.2*2 0.4 ...0
0.4*2 0.8 ...0
0.8*2 1.6 ...1
0.6*2 1.2 ...1
0.2*2 0.4 ...0
0.4*2 0.8 ...0
0.8*2 1.6 ...1
.......(loop)由上得到十进制数0.2的二进制数为 0.00110011001.... 1.10011001....*2^(-3)
十进制2.25在计算机中的科学记数法的表示形式是1.10011001 * 2^(-3)。 符号部分为0指数部分为-3 127尾数部分为10011001...
float num 0.2;符号位 指数部分 尾数部分float类型 1bit 8bit 23bit0.2 0 -3 10011001...符号位 0指数部分: -3127 0111 1100尾数部分 10011001...无限循环 100110011001100110011000.2 在计算机中存储的形式是 : 0 0111 1100 10011001100110011001100这里不知道为什么转换器中尾数的最后一位为1可能是四舍五入吧。
大家可以通过转换工具验证其他浮点数的转换结果IEEE754浮点数二进制转换工具
浮点数的大小范围
单精度类型float 阶码的范围是 -126128 这个是IEEE-754标准中定义的
我们可以通过明示常量获取。
#includestdio.h
#include float.hint main()
{printf(float limit min:%e,max:%e\n,FLT_MIN,FLT_MAX);return 0;
}所以floa单精度类型的浮点数t最小值为 2-126 1.175494E-38最大值为2128 3.4028E38