结构体位制概念

2024-05-03 15:08
文章标签 概念 结构 体位

本文主要是介绍结构体位制概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文转自:http://capacity.blog.163.com/blog/static/20866413120128172228953/

在使用结构体位制的时候有两点要特别注意:

1.

//位段成员的类型仅能够为unsigned或者int

2.

unsigned b:4;
unsigned :0; //定义长度为0的位段时不能指定名字,否则编译不过 unsigned d:1; //定义了0字段后,紧接着的下一个成员从下一个存储单元开始存放; //此例子中,d前面那个存储单元中的余下的27位中被0填充了

/* DATE : 2010.6.24 关于C中的位端igned或者int */ #include <stdio.h>typedef struct _A { unsigned int a:4;//位段成员的类型仅能够为unsigned或者int unsigned b:4; unsigned c:2; unsigned d:6; unsigned E:1; unsigned D:2; unsigned T:3; unsigned A:9; unsigned h:4; //前面已经为31,故4+31>32已超过一个存储单元,所以4在一个新的存储单元存放 unsigned y:29;//由于前面的4在一个新的存储单元的开头存放,且29+4>32, 故在另一个新的存储单元存放 }A; //所以最后求出的A的大小是4 + 4 + 4 =12/*对上面的具体解释: 一个位段必须存储在同一个存储单元中,不能跨两个单元.如果某存储单元空间中不能容纳 下一个位段,则改空间不用,而从下一个存储单元起存放该位段. 结构体A中的h和y就是这种情况. 在gcc环境下,测试后,一个存储单元为4个字节. */typedef struct _S { unsigned a:4; unsigned b:4; unsigned c:22; unsigned q:1; unsigned h:1; //unsigned i:33; // 错误:‘i’ 的宽度超过它自身的类型 //unsigned i:1;当多出此行时,该结构体大小由4变为8,因为此行之前正好为32位 } S;typedef struct _T { //当没有占满一个存储单元时,结构体的大小对齐为一个存储单元的大小 unsigned a:2; unsigned b:2; unsigned j:1; unsigned : 1;//可以定义无名位段,此例中该无名位段占用1位的空间,该空间将不被使用 } T;typedef struct _V { unsigned a:1; unsigned b:4; unsigned :0; //定义长度为0的位段时不能指定名字,否则编译不过 unsigned d:1; //定义了0字段后,紧接着的下一个成员从下一个存储单元开始存放; }V; //此例子中,d前面那个存储单元中的余下的27位中被0填充了int main() { A a; S s; T t; V v; printf("sizeof(a)=%d\n", sizeof(a)); printf("sizeof(s)=%u\nsizeof(t)=%u\n", sizeof(s), sizeof(t)); printf("sizeof(v)=%d\n", sizeof(v)); return 0; }

运行的结果:


这篇关于结构体位制概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957026

相关文章

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径