gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:06:14 25 4
gpt4 key购买 nike

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

问题是我似乎无法让它与位域一起工作。看一看:

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 位,然后是最后一位。除非我完全误解了位域的使用。我认为使用 packed 可以解决问题,但如您所见,它并没有解决。

任何帮助将不胜感激。我不止一次在谷歌搜索时被引导到这个网站,所以我寄予厚望。

最佳答案

您可能在 union 体中缺少一个结构体。

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

请注意,尾数/指数和符号的顺序取决于 cpu 的字节顺序。

关于c - 在 C 中使用位域的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/587348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com