首先,浮点数在计算机内存储方式是这样
公式为:
其中d为尾数,p为阶码,由于浮点数在内存中是以二进制保存的,所以阶码底数是2,也是是二进制的基数(r=2)
课本64页例3.17为例:设尾数为8位,阶码为6位,则二进制数:
由于浮点数的小数点来回动,会导致一个数的浮点数有多中表示方式,(比如10=1*10^1,=0.1*10^2=……)
所以强制要求了尾数d大于0.1小于1,这样的话尾数d就是一个纯小数,而且小数点后第一位不为0(杜绝了小于0.1时0.09x小数点又移动了一位这种情况,大于1时,变成了1.x,小数点又移动了)。
这样的话例子中,二进制数-1101.010保存时应该先移动小数点,变成-0.110101,此时,小数点向左移动了4位。那么在咱们十进制中,就应该是这样:。
但是,咱们这是二进制,基数不应该用10,所以应该改成2,而十进制中的4对应二进制的100,也就是说,最后的答案应该是(二进制的小数点往左移动4位,表示方法应该是2^100):
所以,最后存储在计算机中应该是:
↑ ↑ ↑ ↑
由于尾数-0.110101不够八位,所以最后补两个零,变成11010100
公式为:
其中d为尾数,p为阶码,由于浮点数在内存中是以二进制保存的,所以阶码底数是2,也是是二进制的基数(r=2)
课本64页例3.17为例:设尾数为8位,阶码为6位,则二进制数:
由于浮点数的小数点来回动,会导致一个数的浮点数有多中表示方式,(比如10=1*10^1,=0.1*10^2=……)
所以强制要求了尾数d大于0.1小于1,这样的话尾数d就是一个纯小数,而且小数点后第一位不为0(杜绝了小于0.1时0.09x小数点又移动了一位这种情况,大于1时,变成了1.x,小数点又移动了)。
这样的话例子中,二进制数-1101.010保存时应该先移动小数点,变成-0.110101,此时,小数点向左移动了4位。那么在咱们十进制中,就应该是这样:。
但是,咱们这是二进制,基数不应该用10,所以应该改成2,而十进制中的4对应二进制的100,也就是说,最后的答案应该是(二进制的小数点往左移动4位,表示方法应该是2^100):
所以,最后存储在计算机中应该是:
↑ ↑ ↑ ↑
由于尾数-0.110101不够八位,所以最后补两个零,变成11010100