有关fixed point number和floating point number的问题
fixed point number:存贮是按下图所示:
|8 7 6 5 4 3 2 1|
|X8 X9 X10 X11 X12 |第一字节
|S X1 X2 X3 X4 X5 X6 X7|第二字节
其中S为符号位,X1...X12表示2的负1次方到负12次方,剩余几位是别的用途。这样表示数的范围是-1 ... 1-(2的负12次方),当符号位为1表示负数,此时如果X1到X13都为零,那么表示数是-1。
我现在的问题是,如果写一个函数来把这两个字节中的数转化为float型数直接可以用。或者给你一个float型的数,写一个函数把它存储到两个字节的空间去,我花了不少时间仍想不出一种比较简便快捷的方法,如果有人能给出一个比较完美的算法,我不会吝啬分数的。呵呵,多谢了!
按照上面所说的方式存放到一个字节数组里去,在数组里面占连续的两个元素。还有就是一个相反的过程。
nSign = (short)uFixed > 0; 写错了,应该是 nSign = (short)uFixed
分别用位域和移位来实现,这样写是为了让你看清楚float的构成,还提供了最简单的方法
#include "stdafx.h"
#include
#include
#include
typedef struct
{
unsigned short uSpare : 3; // 为了对齐
unsigned short uSignificand : 12;
short nSign : 1;
}FIXED_BIT;
typedef union
{
unsigned short uFixed;
FIXED_BIT tFixedBit;
}FIXED;
typedef struct
{
unsigned int uSignificand : 23;
int nExponent : 8;