我正在使用位域来轻松访问浮点库我试图为没有FPU的微控制器.
问题是我似乎无法使用bitfields.看一看:
typedef struct
{
union{
unsigned long mantissa: 23;
unsigned long exponent: 8;
unsigned long sign: 1;
float all;
};
}_float __attribute__((__packed__));
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试访问或更改任何内容时,它会将位域分别视为末尾的1,8,23位.虽然它应该是从末尾开始的23位,然后是8位然后是最后一位.除非我完全误解了bitfields的使用.我认为使用打包可以解决问题,但你可以看到它没有.
任何帮助将非常感激.我不止一次谷歌搜索这个网站,所以我寄予厚望.
epa*_*tel 17
您可能在工会中缺少结构.
typedef struct
{
union{
struct {
unsigned long mantissa: 23;
unsigned long exponent: 8;
unsigned long sign: 1;
} float_parts;
float all;
};
}_float __attribute__((__packed__));
Run Code Online (Sandbox Code Playgroud)
请注意,尾数/指数和符号的顺序取决于cpu的endianess.