在C语言中是否可以二进制形式显示定点数,因此可以在不使用float的情况下进行传输?

我知道如何将浮点数或双精度数转换为所需的定点表示形式,但在没有浮点数的情况下会陷入困境。问题是我必须开发的系统有此限制。

我的想法是创建一个结构,该结构包含完整的表示形式以及可处理的整数和小数部分。在仅使用接收到的二进制表示或整数和小数值创建结构之后,将有一个函数进行转换。

更新:

我的问题似乎不够精确,因此我将添加一些细节。

在我的代码中,我必须以一定的定点表示形式创建和接收数字。如下面的答案所述,这不过是指向位序列的指针。我的问题是我必须在发送时创建此位序列或在接收信息时对其进行解释。

这种转换是我忽略符号的问题,当您可以使用浮点数进行转换时,这是一件很容易的事(代码未经测试,但必须像这样工作):

float sourceValue = 12.223445;
int intPart = 0;
float fractPart = 0.0;
//integer part is easy, just cast it
intPart = (int)sourceValue;
//the fractinoal part is the rest
fractPart = sourceValue - intPart;


//multipling the fract part by the precision of the fixed point number (Q9.25)
//gets us the fractional part in the desired representation
u_int64_t factor = 1;
factor = factor << 25;
u_int64_t fractPart = fractPart * factor;


其余的操作可以通过一些移位和使用逻辑位运算符来完成。

但是,如何从中间像这样开始而中间没有浮点数呢?

int intPart = 12;
int fractPart = 223445;


可能吗?如前所述,我有点卡在这里。

谢谢你的帮助!

最佳答案

我不知道您的实际能力,但是定点数可以看作是应用了常数因子的整数。

例如,如果要在间隔[0; 1)在16位中,您可以将其映射到[0; 65536),只需将其乘以65536。

也就是说,这完全取决于整数值的外观以及如何表示它们。在几乎任何情况下,都可以对其应用乘法或除法并完成。

关于c - C中不带浮点数的定点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16961834/

10-12 00:41