文档库 最新最全的文档下载
当前位置:文档库 › 浮点数与十六进制数转换法

浮点数与十六进制数转换法

浮点数与十六进制数转换法

浮点数与十六进制数转换法

一、打开一个工程;

二、模拟菜单下点在线模拟;

三、双点内存,点开D;

四、打开浮点;

五、在没有使用的内存中输入需要转换的浮点数;

六、打开十六进制;

七、打开2W;

八、内存中显示的数就是需要的十六进制数。

100=#42C80000

0=

IEEE浮点数的表示方法及规则

计算机组成原理课程作业报告 解决的问题: IEEE浮点数的表示方法及规则 班级: 10021101 学号: 2011302610 姓名:最天使 日期: 2013年10月29日

一、什么是IEEE754标准 1.两种基本浮点格式:单精度和双精度; 2.两种扩展浮点格式:单精度扩展和双精度扩展; 3.浮点数运算的准确度要求:加、减、乘、除、平方、余数,将浮点格式的数舍入为整数值; 4.在十进制字符串和两种基本浮点格式之一的二进制浮点数格式之间的转换的准确度、单一性和一致性要求; 5.五种异常:乘、除、平方根、余数、在不同浮点格; 6.四种舍入方向: ①向最接近的可表示的值:Round(0.5) = 0; Round(1.5) = 2; Round(2.5) = 2; ②当有两个最接近的可表示的值时首选“偶数”值; ③向负无穷大(向下):floor(1.324) = 1 floor(-1.324) = -2 ④向正无穷大(向上)以及向(截断):C/C++ 函数ceil() ceil(1.324) = 2 Ceil(-1.324) = -1; 二、IEEE754表示浮点数的格式参数: 类型存储位数偏移值 数符S (位)阶码E (位) 尾数M (位) 总位数 (位) 十六进制十进制 短实数 1 8 23 32 0X7FH +127 长实数 1 11 52 64 0X3FFH +1023 临时实数 1 15 64 80 0X3FFFH +16383 特殊情况: 对于阶码为0或者255时,IEEE有特殊的规定: 1.如果E是0并且M是0,这个数+0(和符号位相关); 2.如果E=2-1并且M是0,这个数是正负无穷大(和符号相关); 3.如果E=2-1并且M不是0,这个数表示为不是一个数(NaN)。

C语言的数据类型→浮点型数据

C语言的数据类型→浮点型数据 一、浮点型常量的表示方法: C语言中的浮点数(floating point unmber)就是平常所说的实数。 浮点数有两种表示形式: (1)、十进制小数形式。它由数字和小数点组成(注意必须有小数点)。 如:0.123 、 123.、123.0、0.0 都是十进制小数形式。 (2)、指数形式。 如:123e3或123E3都代表123*103。 注意字母e(或E)之前必须有数字,且e后面的指数必须为整数,如e3、 2.1e 3.5、 e3、 e 等都不是合法的指数形式。 一个浮点数可以有多种指数表示形式。例如123.456e0、 12.3456e1、1.23456e2 、 0.123456e3 、 0.0123456e4 、 0.00123456e5等。其中的1.23456e2称为“规范化的指数形式”。即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。例如2.3478e2 、 3.099E5 、 6.46832E12都属于规范化的指数形式,而

12.908e10 、0.4578E3 、 756e0则不属于规范化的指数形式。一个浮点数在用指数形式输出时,是规范化的指数形式输出的。例如。若指定将实数5689.65按指数形式输出。输出的形式是5.68965e+003,而不会是0.568965e+004或56.8965e+002。 二、浮点型变量 一个浮点型数据一般在内存中4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。例如:实数3.14159在内存中的存放形式可以用下图来表示: 1、浮点型变量在内存中的存放形式。 上图使用十进制数来表示的,实际上在计算机中是用二进制数来表示小数部分以及用2的幂次来表示指数部分的。

浮点数的表示和基本运算

浮点数的表示和基本运算 1 浮点数的表示 通常,我们可以用下面的格式来表示浮点数 S P M 其中S是符号位,P是阶码,M是尾数 对于IBM-PC而言,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。两者的S,P,M所占的位数以及表示方法由下表可知 S P M表示公式偏移量 1823(-1)S*2(P-127)*1.M127 11152(-1)S*2(P-1023)*1.M1023 以单精度浮点数为例,可以得到其二进制的表示格式如下 S(第31位)P(30位到 23位) M(22位到 0位) 其中S是符号位,只有0和1,分别表示正负;P是阶码,通常使用移码表示(移码和补码只有符号位相反,其余都一样。对于正数而言,原码,反码和补码都一样;对于负数而言,补码就是其绝对值的原码全部取反,然后加1.) 为了简单起见,本文都只讨论单精度浮点数,双精度浮点数也是用一样的方式存储和表示的。 2 浮点数的表示约定 单精度浮点数和双精度浮点数都是用IEEE754标准定义的,其中有一些特殊约定。 (1) 当P = 0, M = 0时,表示0。 (2) 当P = 255, M = 0时,表示无穷大,用符号位来确定是正无穷大还是负无穷大。

(3) 当P = 255, M != 0时,表示NaN(Not a Number,不是一个数)。 当我们使用.Net Framework的时候,我们通常会用到下面三个常量 Console.WriteLine(float.MaxValue); // 3.402823E+38 Console.WriteLine(float.MinValue); //-3.402823E+38 Console.WriteLine(float.Epsilon); // 1.401298E-45 //如果我们把它们转换成双精度类型,它们的值如下 Console.WriteLine(Convert.ToDouble(float.MaxValue)); // 3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.MinValue)); //-3.40282346638529E+38 Console.WriteLine(Convert.ToDouble(float.Epsilon)); // 1.40129846432482E-45 那么这些值是如何求出来的呢? 根据上面的约定,我们可以知道阶码P的最大值是11111110(这个值是254,因为255用于特殊的约定,那么对于可以精确表示的数来说,254就是最大的阶码了)。尾数的最大值是11111111111111111111111。 那么这个最大值就是:0 11111110 11111111111111111111111。 也就是 2(254-127) * (1.11111111111111111111111)2 = 2127 * (1+1-2-23) = 3.40282346638529E+38 从上面的双精度表示可以看出,两者是一致的。最小的数自然就是- 3.40282346638529E+38。 对于最接近于0的数,根据IEEE754的约定,为了扩大对0值附近数据的表示能力,取阶码P = -126,尾数 M = (0.00000000000000000000001)2 。此时该数的二进制表示为:0 00000000 00000000000000000000001 也就是2-126 * 2-23 = 2-149 = 1.40129846432482E-45。这个数字和上面的Epsilon 是一致的。 如果我们要精确表示最接近于0的数字,它应该是 0 00000001 00000000000000000000000 也就是:2-126 * (1+0) = 1.17549435082229E-38。 3 浮点数的精度问题 浮点数以有限的32bit长度来反映无限的实数集合,因此大多数情况下都是一个近似值。同时,对于浮点数的运算还同时伴有误差扩散现象。特定精度下看似

浮点数在内存中的表示方法

浮点数在内存中的表示方法 浮点数保存的字节格式如下: 地址+0 +1 +2 +3 内容SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 这里 S 代表符号位,1是负,0是正 E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。 M 24位的尾数保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了 较高的有效位数,提高了精度。 零是一个特定值,幂是0 尾数也是0。 浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下:地址+0 +1 +2 +3 内容0xC1 0x48 0x00 0x00 浮点数和十六进制等效保存值之间的转换相当简单。下面的例子说明上面的值-12.5如何转换。浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表 所列的那样分开,例如: 地址+0 +1 +2 +3 格式SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 二进制11000001 01001000 00000000 00000000 十六进制C1 48 00 00 从这个例子可以得到下面的信息: 符号位是1 表示一个负数 幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。尾数是后面的二进制数10010000000000000000000 在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数 点到尾数的开头,得到尾数值如下: 1.10010000000000000000000

接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动 小数点.因为 指数是3,尾数调整如下: 1100.10000000000000000000 结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:1100表示 (1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。 小数点的右边也代表所处位置的2的幂,只是幂是负的。例如:.100...表示 (1*2^(-1))+ (0*2^(-2))+(0*2^(-2))...=0.5。 这些值的和是12.5。因为设置的符号位表示这数是负的,因此十六进制值 0xC1480000表示-12.5。 所有的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEE E 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的规格: 符号位指数位小数部分 指数偏移量单精度浮点数 1 位[31] 8位 [30-23] 23位 [22-00] 127 双精度浮点数 1 位[63] 11 位[62-52] 52 位[51-00] 1023 我们以单精度浮点数来说明: 指数是8位,可表达的范围是0到255 而对应的实际的指数是-127到+128 这里特殊说明,-127和+128这两个数据在IEEE当中是保留的用作多种用途的 -127表示的数字是0 128和其他位数组合表示多种意义,最典型的就是NAN状态

浮点数表示方法的分析研究

浮点数表示方法的分析研究.txt13母爱是迷惘时苦口婆心的规劝;母爱是远行时一声殷切的叮咛;母爱是孤苦无助时慈祥的微笑。 浮点数表示方法的分析研究 [日期:2006-06-10] 来源:作者: [字体:大中小] 摘要:在《计算机组成原理》课程的教学中,浮点数的表示与运算是一个重点,也是难点。本文对浮点数的一般表示及标准表示的方法、范围、存储格式等进行了比较深入地比较、分析和研究,力求给读者一个清晰的概述。 关键词:浮点数,表示方法,符号,尾数,阶码,范围 《计算机组成原理》课程是计算机科学与技术专业的一门必修专业基础课,主要是讲述计算机系统几大硬件的组成结构和工作原理。在其核心部件——运算器(Arithmetician)的运算机制中,浮点数(Floating-point)的表示与运算方法是一个重点,也是难点,笔者在查阅了大量中外文文献的基础上,根据多年的教学实践经验,对浮点数的表示方法、规格化处理方法、表示范围进行了比较详细地分析研究,以方便学生的学习,共同行们参考。 1、浮点数的一般表示方法 在数学中,表示一个浮点数需要三要素:尾数(mantissa)、指数(exponent,又称阶码)和基数(base),都用其第一个字母来表示的话,那么任意一个浮点数N可以表示成下列形式:N=M×BE,例如N1=1.234×10-6, N2= -0.001011×2011等,同样的数字对于不同的基数是不相同的,移动小数点的位置,其指数相应地跟着变化。在计算机中,表示一个浮点数,同样需要以上三要素,只是阶码与尾数一同存储,基数常有2、8、16等数值,下面的讨论以2为基数进行。 将浮点数放在计算机中存储时,尾数M用定点(Fixed-point)小数的形式,阶码E用有符号整数形式,改变M中小数点的位置,同时需要修改E的值,可以给出有效数字(significant number)的位数,因此M和E决定了浮点数的精度(precision),E指明小数点在B进制数据中的位置,因而E和B决定了浮点数的表示范围(range),浮点数的符号(Sign)是单独考虑,设阶码有m+1位,尾数有n+1位,则一般浮点数的表示方法如图1所示,其中,下标s代表符号位,下标数字代表数字所处的位数,尾数的小数点默认最高数字位M1之前。图(b)是将尾数的符号位提在最前面,其它部分与图(a)一样,是目前常用的一种表示形式。 图1 浮点数的一般表示形式 在这种表示方法中,阶码的二进制编码(binary code)一般是原码(sign magnitude)、补码(twos complement)或移码(bias),尾数的编码一般是原码或补码。 2、浮点数的规格化处理 在浮点数系统中,小数点的浮动使数值的表示不能惟一,从而给数据处理带来困难,因此有必要使浮点数的表示与存储有一定的标准,考虑到阶码、尾数之间的关系,常将尾数的最高数字位是有效值的数值称为规格化(normalization),由于尾数可以是原码或补码,所以有两种规格化的形式,如表1所示。

IEEE浮点数表示法

IEEE浮点数表示法 ------------------------------------------------- float 共计32位(4字节) 由最高到最低位分别是第31、30、29、 0 31位是符号位,1表示该数为负,0反之 30~23位,一共8位是指数位(-128~127) 22~ 0位,一共23位是尾数位 每8位分为一组,分成4组,分别是A组、B组、C组、D组 每一组是一个字节,在内存中逆序存储,即: DCBA 31 30 23 22 0 |-|--------|-----------------------| | | || |-|--------|-----------------------| 注: 尾数的存储位为23位,由于没有存储最高位的1,所以实际有效位为24位。如果其中20位都用来表示小数部分,能表示的最大值为0.999999 我们先不考虑逆序存储的问题,因为那样会把读者彻底搞晕,所以我先按照顺序的来讲,最后再把他们翻过来就行了。

纯整数的表示方法 ------------------------------------------------- 现在让我们按照IEEE浮点数表示法,一步步的将float型浮点数123456.0f转换为十六进制代码。在处理这种不带小数的浮点数时,直接将整数部转化为二进制表示: 1 11100010 01000000 也可以这样表示: 1 11100010 01000000.0 然后将小数点向左移,一直移到离最高位只有1位: 1.11100010 01000000 一共移动了16位,在布耳运算中小数点每向左移一位就等于在以2为底的科学计算法表示中指数+1,所以原数就等于这样 1 11100010 01000000 = 1.11100010 01000000 * (2^16) 现在我们要的尾数和指数都出来了。显而易见,最高位永远是1,因为你不可能把买了16个鸡蛋说成是买了0016个鸡蛋吧?(呵呵,可别拿你买的臭鸡蛋甩我),所以这个1我们还有必要保留他吗?(众:没有!)好的,我们删掉他。这样尾数的二进制就变成了: 11100010

浮点数1

浮点数在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。 浮点计算是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。 一个浮点数a由两个数m和e来表示:a = m × be。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。 这种设计可以在某个固定长度的存储空间内表示定点数无法表示的更大范围的数。 例如,一个指数范围为±4的4位十进制浮点数可以用来表示43210,4.321或0.0004321,但是没有足够的精度来表示432.123和43212.3(必须近似为432.1和43210)。当然,实际使用的位数通常远大于4。 此外,浮点数表示法通常还包括一些特别的数值:+∞和?∞(正负无穷大)以及NaN('Not a Number')。无穷大用于数太大而无法表示的时候,NaN则指示非法操作或者无法定义的结果。 大部份计算机采用二进制(b=2)的表示方法。位(bit)是衡量浮点数所需存储空间的单位,通常为32位或64位,分别被叫作单精度和双精度。有一些计算机提供更大的浮点数,例如英特尔公司的浮点运算单元Intel8087协处理器(以及其被集成进x86处理器中的后代产品)提供80位长的浮点数,用于存储浮点运算的中间结果。还有一些系统提供128位的浮点数 浮点数的表示 在实际应用中,往往会使用实数,例如下面的一些十进制实数: 179.2356=0.1792356x10^3 0.000000001=0.1x10^8 3155760000=0.215576x10^6 很明显,上述第一个数既有整数也有小数,不能用定点数格式化直接表示,后两个数则可能超出了定点数的表示范围,所以计算机引入了类似与科学表示法来标示实数。 (1)典型的浮点数格式 在机器中,典型的浮点数格式如图所示 浮点数代码由两部分组成:阶码E和尾数M。浮点数真值为: N=+/-(R^E)xM R是阶码的底。在机器中一般规定R为2,4,8或16,与尾数的基数相同。例如尾数为二进制,则R也为2。同一种机器的R值是固定不变的,所以不需要在浮点数代码中表示出来,他是隐含约定的。因此,机器中的浮点数只需表示出阶码和尾数部分。 E是阶码,即指数值,为带符号整数,常用移码或补码表示。 M是尾数,通常是纯小数,常用原码或补码表示。

浮点数表示方法与运算

在计算机系统的发展过程中,曾经提出过多种方法表达实数,典型的比如定点数。在定点数表达方式中,小数点位置固定,而计算机字长有限,所以定点数无法表达很大和很小的实数。最终,计算机科学发展出了表达范围更大的表达方式——浮点数,浮点数也是对实数的一种近似表达。 1.浮点数表达方式 我们知道任何一个R 进制数N 均可用下面的形式表示:N R =±S ×R ±e 其中,S—尾数,代表N 的有效数字; R—基值,通常取2、8、16;e—阶码,代表N 的小数点的实际位置(相当于数学中的指数)。 比如一个十进制数的浮点表达1.2345×102,其中1.2345为尾数,10为基数,2为阶码。一个二进制数的浮点表达0.001001×25,0.001001为尾数,2为基数,5为阶码;同时0.001001×25也可以表示成0.100100×23,0.100100为尾数,2为基数,3为阶码。浮点数就是利用阶码e 的变化达到浮动小数点的效果,从而灵活地表达更大范围的实数。 2.浮点数的规格化 一个数用浮点表示时,存在两个问题:一是如何尽可能多得保留有效数字;二是如何保证浮点表示的唯一。 对于数0.001001×25,可以表示成0.100100×23、0.00001001×27等等,所以对于同一个数,浮点有多种表示(也就是不能唯一表示)。另外,如果规定尾数的位数为6位,则0.00001001×27会丢掉有效数字,变成0.000010×27。因此在计算机中,浮点数通常采用规格化表示方法。 当浮点数的基数R 为2,即采用二进制数时,规格化尾数的定义为:1/2<=|S|<1。若尾数采用原码(1位符号位+n 位数值)表示,[S]原=S f S 1S 2S 3…S n (S f 为符号位的数符),则满足S 1=1的数称为规格化数。即当尾数的最高有效位S 1=1,[S]原=S f 1S 2S 3…S n ,表示该浮点数为规格化数。对0.001001×25进行规格化后,表示为0.100100×23。 3.浮点数的表示范围 求浮点数的表示范围,实质是求浮点数所能表示的最小负数、最大负数、最小正数和最大正数。

浮点数表示法-C语言

浮点数表示法 任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的short int型变量的值是1156,那么它的二进制表达就是:00000100 10000100。 由于Intel CPU的架构是Little Endian(请参照计算机原理相关知识),所以它是按字节倒序存储的,那么就应该是这样:10000100 00000100,这就是定点数1156在内存中的结构。 对于一个数0x1122 使用Little Endian方式时,低字节存储0x22,高字节存储0x11 而使用Big Endian方式时, 低字节存储0x11, 高字节存储0x22 浮点数是如何存储的呢?目前已知的所有的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。 下面来看一下具体的float的规格: float:32位,4字节 由最高到最低位分别是第31、30、29、 0 31位是符号位,1表示该数为负,0反之。 30-23位,一共8位是指数位。 22-0位,一共23位是尾数位。 每8位分为一组,分成4组,分别是A组、B组、C组、D组。 每一组是一个字节,在内存中逆序存储,即:DCBA 我们先不考虑逆序存储的问题,所以先按照顺序的来讲,最后再把他们翻过来就行了。 现在让我们按照IEEE浮点数表示法,一步步将float型浮点数123456.0f转换为十六进制代码。 在处理这种不带小数的浮点数时,直接将整数部转化为二进制表示: 1 11100010 01000000也可以这样表示:11110001001000000.0然后将小数点向左移,一 直移到离最高位只有1位,就是最高位的1:1.11100010010000000一共移动了16位,在布耳运算中小数点每向左移一位就等于在以2为底的科学计算法表示中指数+1,所以原数就等于这样:1.11100010010000000 * ( 2 ^ 16 )好了,现在我们要的尾数和指数都出来了。显而易见,最高位永远是1,不能把16说成是0016。 所以这个1也保留,删掉。这样尾数的二进制就变成了:11100010010000000最后在尾数的后面补0,一直到补够23位:11100010010000000000000

数的定点表示和浮点表示

计算机处理的数值数据多数带有小数,小数点在计算机中通常有两种表示方法,一种是约定所有数值数据的小数点隐含在某一个固定位置上,称为定点表示法,简称定点数;另一种是小数点位置可以浮动,称为浮点表示法,简称浮点数。 1. 定点数表示法(fixed-point) 所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。 定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最高位之前。若数据x的形式为x=x0.x1x2… xn(其中x0为符号位,x1~xn是数值的有效部分,也称为尾数,x1为最高有效位),则在计算机中的表示形式为: 一般说来,如果最末位xn= 1,前面各位都为0,则数的绝对值最小,即|x|min= 2-n。如果各位均为1,则数的绝对值最大,即|x|max=1-2-n。所以定点小数的表示范围是:

2-n≤|x|≤1 -2-n 定点整数是纯整数,约定的小数点位置在有效数值部分最低位之后。若数据x的形式为x=x0x1x2…xn(其中x0为符号位,x1~xn是尾数,xn为最低有效位),则在计算机中的表示形式为: 定点整数的表示范围是: 1≤|x|≤2n-1 当数据小于定点数能表示的最小值时,计算机将它们作0处理,称为下溢;大于定点数能表示的最大值时,计算机将无法表示,称为上溢,上溢和下溢统称为溢出。 计算机采用定点数表示时,对于既有整数又有小数的原始数据,需要设定一个比例因子,数据按其缩小成定点小数或扩大成定点整数再参加运算,运算结果,根据比例因子,还原

浮点数计算实例

浮点数表示法示例 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格: 符号位阶码尾数长度 float 1 8 23 32 double 1 11 52 64 通通表示为1.f * 2^n 因为浮点数中的小数部分= x1*1/2 + x2*1/4 + .....+xn*1/(2^n)来近似,所有这就是浮点数的精度问题。 以下通过几个例子讲解浮点数如何转换为二进制数 例一: 已知:double类型38414.4。 求:其对应的二进制表示。 分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位: 最高位63位是符号位,1表示该数为负,0表示该数为正; 62-52位,一共11位是指数位; 51-0位,一共52位是尾数位。 步骤:按照IEEE浮点数表示法,下面先把38414.4转换为十六进制数。 把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理: 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了。隐藏位技术:最高位的1不写入内存(最终保留下来的还是52位)。 如果你够耐心,手工算到53位那么因该是:38414.4(10)=1001011000001110.0110011001100110011001100110011001100 ...... 1100110011001101...... (2) 科学记数法为:1.001011000001110 0110011001100110011001100110011001100,右移了15位,所以指数为15。或者可以如下理解: 1.001011000001110 0110011001100110011001100110011001100×2^15 于是来看阶码,按IEEE标准一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为负,为了便于计算,规定都先加上1023(2^10-1),在这里,阶码:15+1023=1038。二进制表示为:100 00001110; 符号位:因为38414.4为正对应为0; 合在一起(注:尾数二进制最高位的1不要): 0 1000000 1110 0010 11000001 110 01100 11001100 11001100 11001100 11001100 例二:已知:整数3490593(16进制表示为0x354321)。求:其对应的浮点数3490593.0的二进制表示。 解法如下: 先求出整数3490593的二进制表示: H: 3 5 4 3 2 1 (十六进制表示) B: 0011 0101 0100 0011 0010 0001 (二进制表示) │←──────21─────→│ 即:1.1010101000011001000012×221 可见,从左算起第一个1后有21位,我们将这21为作为浮点数的小数表示,单精度浮点数float由符号位1位,指数域位k=8位,小数域位(尾数)n=23位构成,因此对上面得到的21位小数位我们还需要补上2个0,得到浮点数的小数域表示为: 1 0101 0100 0011 0010 0001 00

浮点数表示方法总结

1.关于浮点数的问题 浮点数的一般格式: 格式(1) 格式(2) 注意:(1)一般浮点数尾数采用纯小数(隐含位为0)来表示,即尾数M 与定点小数表示方法相同,由于 尾数的符号位决定整个浮点数的符号,故有时采用格式(2)的形式; (2)当尾数真值为0(不论阶码何值),或阶码的值比能在机器中表示的最小值还小,计算机把该浮 点数看成零值,称为机器零,即浮点数表示不了真值绝对值很接近0的数,只能看成0处理; (3)尾数通常用原码或补码表示,阶码一般用移码或补码表示,如无特别说明,采用课本44页移 码表示方法。 浮点数表示范围: ?最大阶码 最大正数=最大正尾数2 ?最小阶码最小正数=最小正尾数2 ?最小阶码 最大负数=最大负尾数2 ?最大阶码最小负数=最小负尾数2 那么给定一浮点数的表示形式,包括符号、阶码、尾数各占位数及其采用哪种机器码表示,如求其能表示最大负数,转化为求这种表示形式的能表示的最大负尾数,最小阶码。 浮点数规格化表示: 为了提高数据的表示精度,当浮点数尾数的真值不为 0 时,满足条件112≤≤尾数真值,称为一般 浮点数的规格化表示。如没特别说明,指的是一般的非规格化浮点数。注意规格化浮点数与一般浮点数一样,隐含位也是0,仅仅对尾数真值加上这一约束条件而已。对于不同码制,特征如下: (1)尾数原码表示: (采用形式(1),按照尾数数值位为n 位) ①尾数>0时,其尾数部分形式尾数符号 1位 尾数数值n 位 01XXXXXXXXXXXXXXXXXX 称为规格化 最大:尾数部分0111…11,真值为12n --; 最小:尾数部分0100…00,真值为 12 ; ②尾数<0时,其尾数部分形式尾数符号1位 尾数数值n 位 1 1XXXXXXXXXXXXXXXXXX 称为规格化 最大:尾数部分1100…00,真值为12 - ; 最小:尾数部分1111…11,真值为(12)n ---; 阶码符号尾数符号 数值 阶码符号 尾数符号0

32位单精度浮点数的IEEE表示法

float 共计32位(4字节) 31位是符号位,1表示该数为负,0反之 30~23位,一共8位是指数位(-128~127) 22~ 0位,一共23位是尾数位,尾数的编码一般是原码和补码 IEEE标准从逻辑上用三元组{S,E,M}表示一个数N,如下图所示: n,s,e,m分别为N,S,E,M对应的实际数值,而N,S,E,M仅仅是一串二进制位。 ★S(sign)表示N的符号位。对应值s满足:n>0时,s=0; n<0时,s=1。 ★E(exponent)表示N的指数位,位于S和M之间的若干位。对应值e值也可正可负。 ★M(mantissa)表示N的尾数位,恰好,它位于N末尾。M也叫有效数字位(sinificand)、系数位(coefficient), 甚至被称作“小数”。 IEEE标准754规定了三种浮点数格式:单精度、双精度、扩展精度。前两者正好对应C语言里头的float、double或者FORTRAN里头的real、double精度类型。限于篇幅,本文仅介绍单精度、双精度浮点格式。 ★单精度:N共32位,其中S占1位,E占8位,M占23位。 ★双精度:N共64位,其中S占1位,E占11位,M占52位。 值得注意的是,M虽然是23位或者52位,但它们只是表示小数点之后的二进制位数,也就是说,假定M为“010110011...”, 在二进制数值上其实是“.010110011...”。而事实上,标准规定小数点左边还有一个隐含位,这个隐含位通常,哦不,应该说绝大多数情况下是1,那什么情况下是0呢?答案是N对应的n非常小的时候,比如小于2^(-126)(32位单精度浮点数)。不要困惑怎么计算出来的,看到后面你就会明白。总之,隐含位算是赚来了一位精度,于是M对应的m最后结果可能是"m=1.010110011...”或者“m=0.010110011...” 四、计算e、m 首先将提到令初学者头疼的“规格化(normalized)”、“非规格化(denormalized)”。噢,其实并没有这么难的,跟我来!掌握它以后你会发现一切都很优雅,更美妙的是,规格化、非规格化本身的概念几乎不怎么重要。请牢记这句话:规格化与否全看指数E! 下面分三种情况讨论E,并分别计算e和m:

相关文档