首页 > 代码库 > 浮点数类型的表现形式(未完待续)

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

浮点数的存储方式主要分为两种:定点存储和浮点存储。

定点存储:就是约定好整数位和小数位的长度。优点是计算效率高,缺点是存储不灵活。

浮点存储:用一部分二进制位存放小数点的位置信息,称为指数域,其他的数据位存储没有小数点时的数据和符号,称为数据域和符号域。下面主讲浮点存储。

在C/C++中,将浮点数强制转换为整形,不会采用四舍五入,而是舍弃小数部分(向0取整)。

float型浮点数虽然占4字节,但都是以8字节方式进行处理,作为参数或返回值时,传递的都是8字节数据。

一、浮点数的编码方式

浮点数编码转换采用的是IEEE规定的编码标准,将一个浮点数转换为二进制数,以科学计数法划分,将浮点数拆分为3部分:符号、指数、尾数。

①float型的IEEE编码

技术分享

 

二、基本的浮点数指令

浮点数的操作不会用到通用寄存器,而会使用浮点协处理器的浮点寄存器。

浮点寄存器是通过栈结构实现的,由ST(0)~ST(7)共8个栈空间组成,每个浮点寄存器占8字节。每次使用浮点寄存器都是先使用ST(0),而不能越过ST(0)直接使用后面的寄存器。

浮点寄存器的使用就是压栈、出栈的过程。当ST(0)存在数据时,执行压栈操作后,ST(0)中的数据将装入ST(1)中,新数据放入ST(0)中。如果再次操作压栈,会将ST(1)中的数据装入ST(2)中,ST(0)中的数据装入ST(1)中,最后将新数据装入ST(0)中。以此类推,在8个浮点寄存器都有值的情况下继续向ST(0)中存放数据,这时会丢弃ST(7)中的数据。

技术分享

IN表示操作数入栈,OUT表示操作数出栈。其他运算指令与普通运算指令类似,只需在前面加F即可。

 

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