当前位置: 首页 > news >正文

自学嵌入式 day 17- c语言-第11章 结构体与共用体 第12章 位运算

第十一章 结构体与共用体

11.1 结构体

声明:

struct Student  //结构名,符合标识符规则,第一个字母大写

{

        int id;

        char name;

        float score;

};

定义:

struct Student(结构名)  s(变量名);

s.id = 1;//“  . ”结构体运算符,优先级为1,表达式为int 型

strcpy(s.name,"zhangsan");

s.score = 77;

作用:将不相关的内容打包,封装在一起,可统一引用。

(1)声明可放在头文件中,可在声明后定义变量,具有全局作用域,是全局变量。

(2)初始化:

struct Student s = {1,"zhangsan",77};

次序于声明顺序一致,且可选择元素初始化 s = {.id = 1,.score = 77};结构体成员部分初始化。

(3)结构体变量与变量之间可整体赋值。

考点:下列结果为:

printf("%d\n",sizeof(struct Student));

        内存对齐:cpu与RAM之间由地址总线,数据总线、控制总线连接,其中数据总线有32根,一次性传递32个比特,也就是4个字节,cpu访问时以4个字节为单位,所以系统存储数据时会将变量的地址放在可被四整除的位置上,方便cpu访问,这个过程为内存对齐。

        解法:

(1)默认按照计算机位数对齐,若计算机位数为64,则最终大小必须为64 / 8 = 8的整数倍。

(2)从结构体成员中查找字节数最大的成员,最终大小按此成员大小对齐。

(3)把每个成员按照声明顺序依次存入内存,偏移量 / sizeof(成员)必须整除。

注:

(1)-> :指向结构体成员运算符,当成员用指针指向时可用。

(2)结构体不可整体比较,可被整体赋值。

11.2 共用体

声明:

union 共用体名

{

        ...

} ;

(1)成员共享内存空间,从字节的起始部分开始共享。

(2)其值会被最后成员的值覆盖。

用法:判断小端存储

union Demo

{

        int i;

        char j;

};

int main(void)

{

        union Demo s ;

        s.i = 1;

        if(d.c == 1)

        {

                puts("little");

        }

        else

        {

                puts("big");

        }

}

补充:可用指针判断小端存储

int main(void)

{

        int i = 1;

        char *j = (char *) &i;

        if(*j == 1)

        {        

        puts("little");        

        }

}

11.3 枚举类型

声明:

enum 枚举类型名

{

        ...

};

定义:

 enum 枚举类型名 变量名;

11.4 用typedef定义类型

typedef 数据类型 数据名

好处:使用类型时可简化复杂的类型名称;

坏处:代码可读性降低;

第十二章 位运算

操作数必须是整形或者与整形相兼容的类型。

12.1 位运算符

(1)按位与-" & ",指定位清零 

        参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。

(2)按位或-" | ",指定位置1

        两个相应的二进制位中只要有一个为1,该位的结果值为1。

(3)按位异或-" ^ ",指定位翻转

        若参加运算的两个二进制位同号,则结果为0(假);异号则为1(真)。

(4)按位取反-" ~ "

        是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。

(5)左移-"<<"

        用来将一个数的各二进制位全部左移若干位,右边只补零。

补充:

①指定位清零

②指定位置1

(6)右移-">>"

        无符号数右移补零,逻辑右移,有符号数右移补1,算数右移。

相关文章:

  • 批量导出docker镜像
  • 如何解决 PowerShell 显示 “此系统上禁用了脚本运行” 的问题
  • 在资源受限设备上实现手势识别:基于包络EMG数据和实时测试的Tiny-ML方法
  • 【Linux】用户管理
  • Dify-1.3.1介绍及部署镜像下载
  • ECMAScript 2017(ES2017):异步编程与对象操作的革新
  • 0.环境初始化
  • Python时间模块
  • PXE_Kickstart_无人值守自动化安装系统
  • 自动语音拨号系统V2.6.0产品说明书
  • BC12-字符金字塔
  • day21python打卡
  • HC-SR04超声波测距传感器
  • Block Styler——字符串控件
  • jetson orin nano super AI模型部署之路(十)使用frp配置内网穿透,随时随地ssh到机器
  • 含锡电镀废水深度净化技术体系解析化利用的全流程优化
  • 【C++贪心 位运算】B3930 烹饪问题|普及
  • Day20打卡-奇异值SVD分解
  • 2025年大模型RAG技术的实践总结
  • 解释器和基于规则的系统比较
  • 中国工程院院士、国医大师、现代中国针灸奠基人石学敏逝世
  • 铁肩担道义,历史鉴未来——中共中央政治局委员、外交部长王毅谈习近平主席对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 江苏省委社会工作部部长等多人拟在省志愿服务联合会任职
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险
  • 习近平会见塞尔维亚总统武契奇
  • 教育部答澎湃:2025世界数字教育大会将发布系列重磅成果