【问题标题】:How to manage unions and bit-fields如何管理联合和位域
【发布时间】:2019-11-23 07:56:28
【问题描述】:

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

【问题讨论】:

  • 将您的代码添加到此问题
  • 定点加法实际上是两个整数之间的+ 运算符。位域只会妨碍您。因此,您的问题是关于如何实施使您的原始问题复杂化的方法..
  • @harold op 说“小数部分是 3 位”所以它不是整数
  • @Marichyasana 是的,这就是定点算术的工作原理。在这里,它们只是隐式按 1/8 缩放的整数,该缩放与加法无关。不过,乘法和除法需要特别注意。

标签: c bit-fields fixed-point


【解决方案1】:

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 计算。

【讨论】:

    【解决方案2】:

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

    struct decimalPoint
    {
        unsigned int wholePart:5;
        unsigned int decimalPart:3;
    };
    

    现在,由于定义数据的方式已准备就绪,您可以执行此数据的添加并将结果存储回相同的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多