定点数运算c语言程序,c语言 fixed-point 定点数 运算

本文探讨了如何在C语言中将fixed point number(定点数)与floating point number(浮点数)相互转换的问题。通过位操作和移位实现从浮点数到定点数以及反之的转换函数,例如FloatToFixed和FixedToFloat。示例代码展示了不同方法的实现,包括最简单的实现方式。
摘要由CSDN通过智能技术生成

有关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;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值