浮点数的编码

                浮点数的编码

(1)浮点数:
    小数点位置可移动的数据称为浮点数,可用下式表示:N=M*RE
其中,M—尾数,
   R—阶的基数(也就是指数部分的底)。R 一般取2、8或16,为约定的常数,大多数机器 R 取定为2。
   E—阶的阶码。

  当基数约定后,对浮点数的编码就只需对尾数和阶码部分进行编码。浮点数在机器中的形式如下:

              

尾数M用定点小数表示,阶码E是整数。 M乘以RE后小数点的位置改变,改变指数部分RE的值,小数点的位置随之变动,故称上述表示法表示的数据为浮点数。
 
 (2)浮点数的编码
    阶码E一般用移码或补码表示,尾数用原码或补码表示。

 机器零 当浮点数的尾数部分M=0时,不论阶码为何值,都看作是零值,称为机器零。
 上溢 浮点数的绝对值太大而机器不能表示的情况,此时浮点数的阶码大于机器所能表示的最大阶码。
 下溢 浮点数的绝对值太小(阶码小于机器所能表示的最小阶码)的情况称为下溢。当浮点数下溢时,通常将尾数各位强置为零 ,按机器零处理。

        
 
 (3)规格化浮点数
    为了便于浮点数之间的运算与比较,也为了提高浮点数的精度,规定计算机中的浮点数尾数部分必须满足1/R≤|M|<1,也即,小数点后的第一位必须是有效数字。当尾数用补码表示,且R=2时,其规格化形式一般为:

                     

上式表明,当尾数的最高数值位与符号位相反时,即为规格化形式。但对于M<0 有两种特殊情况需考虑。

   *M=-1/2,按规定是规格化数,但[-0.5]补=1.10…0,与一般情况相悖,为便于硬件判断,特规定-0.5不    是规格化的数(对补码而言)。

   *M=-1,因小数补码允许表示-1,且[-1]补=1.00…0.故将-1作为规格化数(对补码而言 )
 
 (4)IEE754标准
  现代计算机中,浮点数一般采用IEEE制定的国际标准,形式如下;

符号位s 阶码e 尾数 总位数
     短实数(单精度数) 1 8 23 32
     长实数(双精度数) 1 11 52 64
     临时实数 1 15 64 80

在IEEE754浮点数标准中,符号位也是“0”表示正数,“1”表示负数。阶码也用移码表示,尾数也是规格化表示,但为如下形式:1.ff---f.在实际表示中,整数位的1省略,称隐藏位 (临时实数不采用隐藏位方案)。由于尾数形式的变化,阶码部分也与一般移码不同,对短实数而言,[X]移=27+x-1=127+x,也就是说此种移码比一般移码的值小1,如.[810]移为13310  而不是13410。所以,短实数.长实数和临时实数的阶码偏移量分别为7FH、3FFH和3FFFH。单精度数所表示的数值为:(-1)5 1.ff---f*2e-127。

注意:浮点数的编码有多种方法,在实际应用时,首先一定要明确是哪种编码方法,分清各种编码方法的不同之处,这样才能不出差错。

4.文字的编码
 (1)  西文字符的编码 目前常用的编码系统是ASCII码(American Standard  Code  for  Information Interchange)。
  ASCII码特点:
*每个字符用7位二进制代码表示。在计算机中每个符号实际用8位表示,最高位置“0”或作为奇偶校验位。
*共有128个符号。其中95个可印刷字符(包括空格),其余为控制字符。
*字符0——9的高3位编码为011,低4位为0000——1001(正好为二进制形式的0—9),满足正常的排序关系,且大、小写英文一位字母编码的对应关系简单,大写字母的高2位编码10,低5位为00001-11010(为二进制形式的1—26),小写字母高2位为11,低5位也为0000—11010。
 (2)中文编码
  汉字编码分输入码、机内码和字形码等三大类。
汉字输入码  主要有数字编码、拼音编码和字形编码等。这几种编码方式都是利用相应的编码规则,用字母数字串代
      替汉字,从西文标准键盘上输入汉字。
汉字机内码 用于汉字信息存储、交换、检索等的机内代码,一般用两个或三个字节表示一个汉字。为了区别于ASCII
      码,汉字机内代码中字节的最高位均为“1”。
汉字字形码 根据汉字字形信息进行编码,存储在字形库中,用于汉字的输出,常用点阵表示汉字字形。
 (3)十进制数的编码
  *字符串形式  一个字节存放一个十进制的数位或符号,用连续的多个字节表示一个完整的十进制数据。
十进制数据的机内表示常用ASCII码。有前分隔字符串和串两种方式。

#前分隔字符串  符号位在数字位之前单独占用一个字节。字符“+”(2B)16表示正号,“-”(2D)16表 示负号。

#后嵌入字符串   将符号位嵌入最低一位数字里。规则:将“-”号变成(40)16与最低位数相加。“+”号省略。

上述两种表示方法主要用于非数值计算的应用领域,算术运算不方便。

*压缩十进制数串形式  一个字节存放两个十进制数位,用连续的多个字节表示一个完整的十进制数据。比前一种形式节省存储空间并且便于数据处理,应用广泛。
  在压缩十进制数串形式中,可以用ASCII码的低4位或BCD码表示十进制数。符号位也用4位二进制代码表示,并放在最低数位之后(C)16=(1100)2代表正号,(D)16=(1101)2表示负号。
  用十进制数串表示十进制数据的特点是位长可变,但需给出首地址和串长。

插入一点内容:  十进制小数变为二进制
例如:0.25,
转换过程为:0.25×2=0.5,所以小数点后第一位取0
0.5×2=1.0,所以小数点后第二位取1,现在十进制小数的小数点后为0,所以转换结束。结果为0.01。
例如:0.65,
转换过程:0.65×2=1.3,取1,
          0.3×2=0.6,取0,
          0.6×2=1.2,取1,
          0.2×2=0.4,取0………………
结果为0.1010……

好的,下面是实战,看一个简单的例子:(没了解实现机制之前真是头疼)

float f=0.5 ,应该表示为1* 2^(-1)

看到内存里是怎么表示的 f = 0x3f 00 00 00

二进制的表示是 0011 1111 0000 0000 ............

第31位是0,表示符号+

第23-30 是阶码,一般用移码表示,-1(1000 0001)的反码就是0111 1110 (这里用的反码),不错

第0-22位是基数,怎么是0,应该是1 啊 ,原来ieee754的浮点数使用了隐含位,即尾数部分要加上1才是真正的尾数

.... 真是的,规矩还真多

再看float f=2.5

0010.1 = 1.01*2(1)

正数,所以32位为0

-1:  0000 0001+ 127 =128 =1000 0000

所以2.5 的内存表示为0100 0000 0000 ..................    (0x40 00 00 00)

如果float f=-2.5

负的,所以32位为1

2.5=10.1=1.01*2^1

1+127=128=1000 0000

所以-2.5的内存形式就是1100 0000 0010 0000...................

16进制就是0xc0200000

本文转自http://blog.csdn.net/cslie/article/details/2121355

时间: 2024-12-12 09:40:01

浮点数的编码的相关文章

C/C++中整数与浮点数在内存中的表示方式

在C/C++中数字类型主要有整数与浮点数两种类型,在32位机器中整型占4字节,浮点数分为float,double两种类型,其中float占4字节,而double占8字节.下面来说明它们在内存中的具体表现形式: 整型: 整型变量占4字节,在计算机中都是用二进制表示,整型有无符号和有符号两种形式. 无符号变量在定义时只需要在相应类型名前加上unsigned 无符号整型变量用32位的二进制数字表示,在与十进制进行转化时只需要知道计算规则即可轻松转化.需要注意的是在计算机中一般使用主机字节序,即采用“高

IEEE 754标准浮点数

一.IEEE 754浮点数的表示 浮点数数学表示: 符号位(sign):决定该浮点数的正负 尾数(significand):二进制小数,范围在[1,2)或者[0,1)中 阶码(exponent):对浮点数加权,权重为2的E次幂 单精度浮点数:在单精度的浮点数中,符号位编码为1位二进制位,阶码编码为为8位二进制位,尾数编码为23位二进制位: 双精度浮点数:在双精度浮点数中,符号位编码为1位二进制位,阶码编码为为11位二进制位,尾数编码为52位二进制位: 二.浮点数编码知识储备 <1>浮点数阶码的

浮点数类型的表现形式(未完待续)

浮点数的存储方式主要分为两种:定点存储和浮点存储. 定点存储:就是约定好整数位和小数位的长度.优点是计算效率高,缺点是存储不灵活. 浮点存储:用一部分二进制位存放小数点的位置信息,称为指数域,其他的数据位存储没有小数点时的数据和符号,称为数据域和符号域.下面主讲浮点存储. 在C/C++中,将浮点数强制转换为整形,不会采用四舍五入,而是舍弃小数部分(向0取整). float型浮点数虽然占4字节,但都是以8字节方式进行处理,作为参数或返回值时,传递的都是8字节数据. 一.浮点数的编码方式 浮点数编码

汇编代码还原第一讲,基本类型以及浮点编码.

目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮点栈 2.浮点汇编 3.使用内联浮点汇编实现加法 四丶布尔类型 地址丶指针丶引用表达形式 常量 #define与const定义 总结: 代码还原技术 一丶简介代码还原 例子一:我们很多人都学习过汇编.但是汇编的核心知识就是我能看的懂.有人拿汇编去做外挂.比如我去追偏移.看着视频去做.然后换一个游戏依

c++反汇编与逆向分析 小结

第一章  熟悉工作环境和相关工具1.1 熟悉OllyDBG  操作技巧1.2 反汇编静态分析工具 IDA(最专业的逆向工具)    快捷键    功能     Enter     跟进函数实现     Esc       返回跟进处    A         解释光标处的地址为一个字符串的首地址     B         十六进制数与二进制数转换    C         解释光标处的地址为一条指令     D         解释光标处的地址为数据,没按一次将会转换这个地址的数据长度   

20145239 《信息安全系统设计基础》第3周学习总结

20145239 <信息安全系统设计基础>第3周学习总结 教材学习内容总结 三种数字表示 无符号:编码基于传统的二进制表示法,表示大于或等于0的数字. 补码:编码表示有符号整数的最常见的方式,有符号整数就是可以为正或者为负的数字. 浮点数:编码是表示实数的科学记数法的以二为基数的版本. 漏洞原因:因为3种数字精度有限所以计算机会因溢出而使用求模运算,使无限的明文对应有限的密文,因此会出现漏洞. 进制转换 在计算机导论课程中已掌握. 用gcc –m32可以在64位机上生成32位代码: 寻址和字节

20145326蔡馨熠《信息安全系统设计基础》第三周学习总结

教材学习内容总结 书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下. 1.进制 二进制.八进制.十进制.十六进制(转换:以二进制作为中间变量) 2.字 每台计算机都有一个字长,指明整数和指针数据的大小. 虚拟地址是以这样的一个字来编码的,字长决定虚拟地址空间的最大范围. 3.字节顺序 小端法——在存储器中按照从最低有效字节到最高有效字节的顺序存储对象. 大端法——从最高有效字节到最低有效字节的顺序存储. 4.布尔代数 (1)二进制值是计算机编码.存储.操作信息的核心(0.1),

20135219洪韶武-期中总结

一.第三章主要知识点 1.信息存储 *机器级程序将存储器视为一个非常大的字节数组,成为虚拟存储器:存储器的每个字节都由一个唯一的数字来标识,成为他的地址. *十六进制表示法/十进制和十六进制转换 *排列表示一个对象的字节的两个通用规则:小端法/大端法 *字节变可见的三种情况 *C语言中字符串被编码为一个以null字符结尾的字符数组 *位级运算/逻辑运算/移位运算 2.整数表示 *整数数据类型表示有限范围的整数 *无符号编码,有符号编码,无符号数和有符号数之间转换 *C语言中无符号有符号数之间的转

20135223何伟钦—信息安全系统设计基础第三周学习总结

信息的表示和处理 2.0三种数字表示 无符号:编码基于传统的二进制表示法,表示大于或者等于零的数字. 补码:编码是表示有符号整数的最常见的方式,有 符号整数就是可以为正或者为负的数字. 浮点数:编码是表示实数的科学记数法 的以二为基数的版本. 溢出(overflow)的例子:使用 32 位来表示数据类型int,计算表达式200*300*400*500会得出结果 -884 901 888. 这违背了整数运算的特性,计算一组正数的乘积不应产生一个为负的结果. 2.1信息存储 机器级程序将存储器视为一