当前位置:  开发笔记 > 编程语言 > 正文

在C中使用位域的正确方法是什么?

如何解决《在C中使用位域的正确方法是什么?》经验,为你挑选了1个好方法。

我正在使用位域来轻松访问浮点库我试图为没有FPU的微控制器.

问题是我似乎无法使用bitfields.看一看:

typedef struct
{
   union{
    unsigned long mantissa: 23;
    unsigned long exponent: 8;
    unsigned long sign: 1;
    float all;

      };

}_float __attribute__((__packed__));

问题是,当我尝试访问或更改任何内容时,它会将位域分别视为末尾的1,8,23位.虽然它应该是从末尾开始的23位,然后是8位然后是最后一位.除非我完全误解了bitfields的使用.我认为使用打包可以解决问题,但你可以看到它没有.

任何帮助将非常感激.我不止一次谷歌搜索这个网站,所以我寄予厚望.



1> epatel..:

您可能在工会中缺少结构.

typedef struct
{
    union{
       struct {
           unsigned long mantissa: 23;
           unsigned long exponent: 8;
           unsigned long sign: 1;
       } float_parts;
       float all;
    };
}_float __attribute__((__packed__));

请注意,尾数/指数和符号的顺序取决于cpu的endianess.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有