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

2023-12-31

我正在使用位字段来轻松访问我正在尝试为没有 FPU 的微控制器制作的浮点库。

问题是我似乎无法使其与位字段一起使用。看一看:

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可以解决问题,但正如你所看到的,它没有解决。

任何帮助将非常感激。我不止一次在谷歌搜索时被引导到这个网站,所以我抱有很高的期望。


您可能缺少联合内的结构。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如何从时间戳转换为 Mongo ObjectID

    我知道我们可以使用getTimestamp 从 ObjectId 中检索时间戳 但是有什么方法可以从时间戳生成 ObjectId 吗 更具体地说 如果我有一个输入month and year 然后我想将其转换为Mongo对象ID要在数据库中
  • 使用 jquery 遍历表格单元格

    我有一个包含可变数量列的表 我编写了一个函数来迭代每行中的每个单元格以执行以下操作 检查是否存在输入 检索输入的值 将饼图附加到条件 1 计算结果为 true 的任何单元格 这是我的代码 function addPieCharts var
  • Kubernetes minikube 教程后无法停止 10 个容器

    docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7523fd2c20c7 gcr io google containers k8s dns sidecar am
  • Drupal 7 示例模块,找不到页面,为什么?

    我编写了一个简单的测试模块示例 2个文件 test module test info 并在drupal 7模块中启用了它们 我清除了所有缓存 但当我尝试访问 localhost drupal hello 时 我得到 drupal 404 页
  • 如何在python中实现multiprocessing.Queue的LIFO?

    我了解队列和堆栈之间的区别 但是如果我生成多个进程并在它们之间发送消息multiprocessing Queue如何访问首先放入队列中的最新元素 您可以使用多处理管理器 https docs python org 3 library mul
  • 构建 Clojure 源代码的惯用方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对人们如何构建 Clojure 源代码感兴趣 由于习惯了 Java 我非常熟悉每个源代码文件一个类的范例 将所有数据和方法定义与适当的注释和注
  • Spring Security授权无需认证

    我有一个 Java JSF 2 Spring 3 Hibernate 4 Java EE 应用程序 它使用第三方库来对用户进行身份验证 我将所需的 CA 证书导入到 JVM 中 将第三个库添加到项目中并在 web xml 中进行配置 图书馆
  • 在 mechanize 中禁用 ssl 证书验证

    我是 python 新手 我试图使用 mechanize 访问网站 br mechanize Browser r br open https 172 22 2 2 这给了我以下错误 Traceback most recent call la
  • 如何动态调整静态 UITableViewCell 的大小? [复制]

    这个问题在这里已经有答案了 可能的重复 带有包装标签的静态表格单元格的动态高度 https stackoverflow com questions 11981071 dynamic height for static table cells
  • z-index 不适用于绝对位置

    我打开控制台 chrome firefox 并运行以下几行 body append div style width 100 height 100 background color black div body append div styl
  • 枚举和定义语句之间的区别

    在 C C 中使用 Define 语句和 enum 语句有什么区别 在 C 或 C 中使用它们时有什么区别 例如 什么时候应该使用 enum BUFFER 1234 over define BUFFER 1234 enum定义语法元素 de
  • 为什么引用计数器需要内存顺序限制?

    在示例中boost atomic the unref功能 void intrusive ptr release const X x if x gt refcount fetch sub 1 boost memory order releas
  • Vue html 注释处理

    我正在使用 Vue 生成一些 html 模板 我需要按照下面的代码包含 html 条件注释 var productTemplate new Vue el myApp div div class some content This is so
  • 库的 stylePreprocessorOptions,我应该放在 angular.json 中的哪里?

    我正在尝试使用stylePreprocessorOptions为了包含我的变量文件夹的路径对于图书馆项目像这样 stylePreprocessorOptions includePaths styles variables 然后我用 impo
  • 有没有什么技巧可以创建电视静态的 gif 动画,使其相对较小?

    提前道歉 但这并不是一个真正的 Photoshop 问题 相反 我试图想出一些令人信服的东西 但尽可能地利用 gif 格式的压缩和功能来生成尽可能小的动画文件 一些限制 它至少需要 20 或 30 帧 我尝试过使用更少的帧 因为它们基本上是
  • 工作树清理时出现结帐错误

    请 我收到错误 您对以下文件的本地更改将被签出覆盖 但我的工作树是干净的 有人知道这里发生了什么吗 git status On branch experiment nothing to commit working tree clean g
  • 如何排除 SOLR 查询中的字段

    我有一个 SOLR 查询 它应该获取我存储的所有字段 除了一个字段 说我有20字段 我需要硬编码吗19我想要获取的字段 fl f f f f 或者有没有办法做类似的事情 fl f f 代表字段名称 不幸的是 通过查询字符串删除字段名称的能力
  • 在 perl 中关闭 AutoCommit 的情况下调用 SELECT 语句时,SQLite 是否执行磁盘活动?

    我在磁盘文件中创建了一个新的 SQLite 数据库 并使用以下命令关闭了 AutoCommit my dsn dbi SQLite dbname folder path file db my user my password my dbh
  • PostCSS 错误:[object Object] 不是 PostCSS 插件

    错误来自于postcss插件 我想我可能写错了 我正在尝试添加cssnano and autoprefixer to the postcss plugin gulp node modules gulp postcss node module
  • 在 C 中使用位域的正确方法是什么?

    我正在使用位字段来轻松访问我正在尝试为没有 FPU 的微控制器制作的浮点库 问题是我似乎无法使其与位字段一起使用 看一看 typedef struct union unsigned long mantissa 23 unsigned lon