C语言位域定义与使用

参考文章:

【C语言】详解位域定义与使用_c 语言定义位-CSDN博客

代码有修改,主要是变量初始化,原程序可能相应内存不能写。且第二个字节F不好区分各位。

#include <stdio.h>


typedef struct
{
    unsigned short b1 : 1;
    unsigned short b2 : 3;
    unsigned short : 4;
    unsigned short b3 : 4;
}Bit_t;


typedef union
{
    unsigned short _2byte;
    unsigned char byte;
    Bit_t bit;
}U_t;


int main()
{
    U_t* pu;
    int a = 1;
    //pu = (U_t*)0x12345678;//假设寄存器的地址为0x12345678;
    pu = (U_t*)(&a);
    pu->_2byte = 0xD0C;//以2个字节的方式写入数据到寄存器

    printf("b1 = %u\n", pu->bit.b1);//读出数据
    printf("b2 = %u\n", pu->bit.b2);
    printf("b3 = %u\n", pu->bit.b3);

    return 0;
}

调试运行结果:

原文中对各位域在内存中分布写的很明白,但有一个地方没写,即是各位域内部的位和原short型数据各位怎么对应。

先给规则:

字节的高低,是按照从左到右顺序(小端存储),取各位操作时,先按照字节顺序,先取低字节再取高字节,即从右向左取,即是反过来取的。

而在每个字节内部,也是按照从左到右放置各位,位域取位操作时,又是先取低位再取高位,即从右向左取,也是反过来的。

但是,在取完后放置时,却是需要再反一下,即先取的放低位,后取的放高位,即取出数据和位对应的原数据,高低位翻转了!

再举例:

如这里short型对应两个字节,即联合体是两个字节的。pu指向的联合体放置两个字节0xD0C时,先放低字节,再放高字节。即,第一个字节是0C,第二个字节是D。

每个字节按照位展开依次是:

0000 1100

0000 1101

则b1是第一个字节的第8位(最低位),即为0。

b2是第一个字节的第7位到第5位(取的顺序依然是从低到高),即0 1 1,但是结果却是110,即6。

b3是第二个字节的低4位(取的顺序依然是从低到高),即1 0 1 1,结果却是1101,即13。

所以取出后需要再反一下!

其实也是因为先取的是原数据的低位,后取的是高位,所以放的时候,也是从右往左放,所以最终结果是高低位和取的顺序是反的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/332974.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

情人节专属--HTML制作情人节告白爱心

💕效果展示 💕html展示 <!DOCTYPE html> <html lang="en" > <head>

ros2仿真学习04 -turtlebot3实现cartographer算法建图演示

安装看这里 https://blog.csdn.net/hai411741962/article/details/135619608?spm1001.2014.3001.5502 虚拟机配置&#xff1a; 内存16g cpu 4 核 磁盘40G,20G 不够 启动仿真 ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py启动成功如下 启动建图 重新开一个…

浅谈情绪的分类合集

什么是情绪分类 情绪分类&#xff0c;是指区分或者对比一种情绪与另一种情绪的方法&#xff0c;目前在情绪研究&#xff08;emotion research&#xff09;与情感科学&#xff08;affective science&#xff09;是具有争议的问题。有两个讨论情绪分类的基本观点&#xff1a; 情…

【计算机组成与体系结构Ⅱ】Tomasulo 算法模拟和分析(实验)

实验5&#xff1a;Tomasulo 算法模拟和分析 一、实验目的 1&#xff1a;加深对指令级并行性及开发的理解。 2&#xff1a;加深对 Tomasulo 算法的理解。 3&#xff1a;掌握 Tomasulo 算法在指令流出、执行、写结果各阶段对浮点操作指令以及 load 和 store 指令进行了什么处…

CC工具箱使用指南:【用地用海指标汇总】

一、简介 在湘源上画的规划用地图&#xff0c;想导出规划指标表是很容易的。 但是现在很多用地图最终是要在ArcGIS中处理的&#xff0c;想再导出指标表就比较麻烦。 这个工具的主要功能就是在ArcGIS中汇总统计&#xff0c;生成类似湘源的Excel格式用地指标表。 二、工具参数…

20240117在本地机器识别OCR法语电影的字幕效果PK

20240117在本地机器识别OCR法语电影的字幕效果PK 2024/1/17 11:18 1959 - Jirai Cracher Sur Vos Tombes [Gast, Vian].avi https://www.pianbar.net//drama/52892.html 1959[我唾弃你的坟墓]Jirai cracher sur vos tombes[BT下载/迅雷下载] magnet:?xturn:btih:7c9c99d9d048…

【备战蓝桥杯】图论重点 敲黑板啦!

蓝桥杯备赛 | 洛谷做题打卡day11 文章目录 蓝桥杯备赛 | 洛谷做题打卡day11杂务题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题解代码我的一些话 杂务 题目描述 John 的农场在给奶牛挤奶前有很多杂务要完成&#xff0c;每一项杂务都需要一定的时间来完成它。比如&a…

canvas绘制不同样式的六角星(示例源代码)

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

Python如何便捷的执行JavaScript代码,调用JS函数

文章目录 📖 介绍 📖🏡 环境 🏡📒 实现方法 📒📝 安装📝 使用⚓️ 相关链接 ⚓️📖 介绍 📖 Python在写一些爬虫代码的时候经常需要接触到JS逆向,其中如何让Python便捷的执行JS代码就成了一个很关键的问题,本文分享一种便捷的方式实现这个需求。 🏡 环…

司铭宇老师:二手房地产中介销售培训:二手房经纪人必备的七种销售能力

二手房地产中介销售培训&#xff1a;二手房经纪人必备的七种销售能力 在房地产行业中&#xff0c;二手房经纪人扮演着至关重要的角色。他们需要具备一系列的销售能力&#xff0c;以便更好地为客户服务&#xff0c;实现业绩增长。本文将详细介绍二手房经纪人必备的七种销售能力…

带你解析Git的基础功能(三)

文章目录 前言一.远程仓库的概念二.远程仓库的操作2.1新建远程仓库2.2 克隆远程仓库2.3 向远程仓库推送2.4 拉取远程仓库2.5 忽略特殊⽂件2.6 标签管理 三.Git实战场景3.1 Git多人实战场景一准备工作由开发者1和开发者2新增加文件内容。将dev的文件合并到master上总结 3.2 Git多…

20240118-最小下降路径总和

昨天的爬楼梯以前写过&#xff0c;是一道基础的动态规划&#xff0c;就不重新写了。 题目要求 给定一个n*n的矩阵数组&#xff0c;返回通过矩阵的任何下降路径的最小和。 下降路径从第一行中的任何元素开始&#xff0c;并选择下一行中正下方或左右对角线的元素。具体来说&am…

【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程

【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程 1&#xff09;系统架构1.1.系统成员组成1.2.作业提交流程 2&#xff09;核心概念2.1. 并行度&#xff08;Parallelism&#xff09;2.1.1.并行子任务和并行度2.1.2.并…

如何无公网ip使用Potplayer访问群晖NAS中储存的本地资源【内网穿透】

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是&#xff1a;1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透&#xff0c;映射至公网4 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内…

2023 年顶级前端工具

谁不喜欢一个好的前端工具&#xff1f;在本综述中&#xff0c;您将找到去年流行的有用的前端工具&#xff0c;它们将帮助您加快开发工作流程。让我们深入了解一下&#xff01; 在过去的 12 个月里&#xff0c;我在我的时事通讯 Web Tools Weekly 中分享了数百种工具。我为前端…

Flink TaskManager内存管理机制介绍与调优总结

内存模型 因为 TaskManager 是负责执行用户代码的角色&#xff0c;一般配置 TaskManager 内存的情况会比较多&#xff0c;所以本文当作重点讲解。根据实际需求为 TaskManager 配置内存将有助于减少 Flink 的资源占用&#xff0c;增强作业运行的稳定性。 TaskManager 内…

Android Dialog setCanceledOnTouchOutside失效,点击dialog外面不消失

前言&#xff1a;有一个需求需要点击dialog外面要消失&#xff0c;本来以为很简单结果设置了一直未生效 setCanceledOnTouchOutside(true); 问了半天chat-gpt4结果给的答案都不明显 查看代码发现设置了style&#xff0c;于是尝试去除这个style&#xff0c;结果点击setCancele…

如何进行高效过滤器检漏:法规标准对比及检漏步骤指南

高效检漏光度计扫描法作为一种关键的高效过滤器检漏手段&#xff0c;在国内受到广泛应用。为确保其有效性和合规性&#xff0c;国内相关法规和标准对其进行了详细规定。本文将对比相关法规&#xff0c;并特别关注检漏过程中的详细步骤。 关于中邦兴业 北京中邦兴业科技有限公司…

买家福音:亚马逊鲲鹏系统全自动操作助你轻松搞定一切

我一直以来都是亚马逊的忠实用户&#xff0c;但是最近我发现了一款真正令人惊叹的工具&#xff0c;改变了我在平台上的经验。我想分享一下我的感受&#xff0c;最近&#xff0c;我得知并尝试了亚马逊鲲鹏系统&#xff0c;简直是为买家账号管理量身定制的利器。在我账号过多时&a…

如何用GPT进行数据分析?

详情点击链接&#xff1a;如何用GPT进行数据分析&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2 二定制自…