C 如何管理联合和位字段

C 如何管理联合和位字段,c,bit-fields,fixed-point,C,Bit Fields,Fixed Point,我一直在尝试创建一个程序,将两个整部分为5位、小数部分为3位的正定点数字相加,但我没有成功,我知道可以通过处理位字段和并集来实现,但我没有找到目标。如果有人能帮助我,我将不胜感激。C编程中的位字段可以使用struct定义,如下所示,用于您想要执行的任务 struct decimalPoint { unsigned int wholePart:5; unsigned int decimalPart:3; }; 现在,由于数据定义的方法已经准备好,您可以执行此数据的加法,并将结果存

我一直在尝试创建一个程序,将两个整部分为5位、小数部分为3位的正定点数字相加,但我没有成功,我知道可以通过处理位字段和并集来实现,但我没有找到目标。如果有人能帮助我,我将不胜感激。

C编程中的位字段可以使用struct定义,如下所示,用于您想要执行的任务

struct decimalPoint
{
    unsigned int wholePart:5;
    unsigned int decimalPart:3;
};
现在,由于数据定义的方法已经准备好,您可以执行此数据的加法,并将结果存储回相同的结构。

让a成为一个整数对象,使用三个分数位的定点表示法表示数字a。然后a=8•a,或者相反,a=a/8

类似地,设b为整数对象,表示具有相同表示形式的数字b

那么,因为a=a/8和b=b/8,我们有a+b=a/8+b/8=a+b/8


因此,a和b表示的数字之和的表示可以用a+b计算。

将您的代码添加到此问题固定点加法实际上是两个整数之间的+运算符。位字段只会成为阻碍。所以,你的问题是如何实现一种使原来的问题复杂化的方法。@harold op说小数部分是3位,所以不是integer@Marichyasana是的,这就是定点算法的工作原理。在这里,它们只是按1/8隐式缩放的整数,这个缩放对于加法来说并不重要。乘法和除法需要特别注意。