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

共用体(联合体)

1、所有成员共用一块内存空间,且同一时刻只有一个成员有效

2、共用体所占内存大小=最大成员所占内存、

3、同样遵循内存对齐规则-->共用体所占内存大小,是成员最大类型的整数倍

定义形式:

union 共用体名

{

成员1;

成员2;

...;

};

枚举:枚举中存放的数据都是整数常量。

枚举定义形式:

enum 枚举名

{

枚举常量1,

枚举常量2,

....

枚举常量n

};

枚举规则:

1、枚举常量默认从0开始依次递增。

2、可以手动指定枚举常量的值,未指定的会沿用前一个值加1。

3、由于枚举中存放的都是常量,所以定义的枚举变量不可以使用成员运算符。

4、枚举中存放的数据都是整型常量。

举例:enum WeekDay{MON, TUE, WED, THU, FRI, SAT, SUN};


位运算:
&(按位与) |(按位或) ^(按位异或)
<<(左移)  >>(右移)
~(按位取反)

1、&(按位与): 全1为1,否则为0
一个数 & 0 --> 清零

1234 & 0 --> 0

0100 1101 0010‬     1234
0000 0000 0000 &      0 &
------------------
0000 0000 0000

2、|(按位或):全0为0,否则为1
一个数 | 0 --> 不变

1234 | 0 --> 0

0100 1101 0010‬     1234
0000 0000 0000 |      0 |
------------------
0100 1101 0010    

3、^(按位异或):相同为0,不同为1

    a = 1234 | b = 4321  --> a = 4321、 b = 1234

a = a ^ b;
a    0000 0100 1101 0010‬     1234
b    0001 0000 1110 0001‬ ^   4321
^   ------------------------
a    0001 0100 0011 0011

    b = a ^ b;
a    0001 0100 0011 0011 
b    0001 0000 1110 0001‬ ^
^   ------------------------
b    0000 0100 1101 0010

    a = a ^ b;
a    0001 0100 0011 0011 
b    0000 0100 1101 0010 ^
^   ------------------------
a    0001 0000 1110 0001

4、~(按位取反):0变1, 1变0

5、<<(左移)
每左移一位,相当于乘以2
0011 0101 << 1  --> 0110 1010

6、>>(右移)
每右移一位,相当于除以2
0110 1010 >> 1  --> 0011 0101

#include <stdio.h>
#include <string.h>#if 0
union Data
{int i;double f;char str[17];
};int main(int argc,char *argv[])
{// union Data 是类型,d是变量名union Data d;printf("%lu\n", sizeof(d));// 只有 i 成员有效d.i = 10;printf("%d, %f, %s\n", d.i, d.f, d.str);// 只有 f 成员有效d.f = 3.14;printf("%d, %f, %s\n", d.i, d.f, d.str);// 只有 str 成员有效strcpy(d.str, "abc");printf("%d, %f, %s\n", d.i, d.f, d.str);return 0;
}
#endif#if 1enum WeekDay{MON, TUE=10, WED, THU, FRI=10, SAT, SUN};int main()
{// 定义枚举变量// 当前变量只能被赋值,不可以使用成员运算符enum WeekDay t;t = SUN;printf("%d\n", t);return 0;
}#endif

练习1:

#include <stdio.h>
int main()
{
struct s1
{char ch, *ptr;union{short a, b;unsigned int c:2, d:1;};struct s1* next;};
return 0;
}

练习2:若int占2个字节,char占1个字节,float占4个字节,sizeof(xc)的大小是()

#include <stdio.h>
int main()
{
struct stu{union{char b[5];  // 5int bh[2];  // 4}cla; // 6char xm[8]; // 8float cj;   // 4};
struct stu xc;
printf("%lu\n", sizeof(xc));  // 20return 0;
}

http://www.dtcms.com/a/283895.html

相关文章:

  • React Native 基础tabBar和自定义tabBar - bottom-tabs
  • Python编程进阶知识之第二课学习网络爬虫(requests)
  • 【真·CPU训模型!】单颗i7家用本,4天0成本跑通中文小模型训练!Xiaothink-T6-mini-Preview 技术预览版开源发布!
  • 对话弋途科技:当AI重构汽车大脑,一场车载操作系统的“觉醒年代“开始了
  • 【理想汽车智驾方案介绍专题 -1】端到端+VLM 方案介绍
  • 113:路径总和 II
  • Go语言时间控制:定时器技术详细指南
  • uni-app 配置华为离线推送流程
  • Go语言高并发聊天室(三):性能优化与压力测试
  • 【物联网】基于树莓派的物联网开发【11】——树莓派无法启动修复解决方案
  • Transformer从入门到精通
  • Spring Boot整合阿里云OSS企业级实践:高可用文件存储解决方案
  • 【Docker基础】Docker-compose基础认知:从核心概念到实战解析
  • 闽南话里的俗语(俚语、谚语、歇后语)
  • S7-1200 模拟量模块全解析:从接线到量程计算
  • 苍穹外卖项目日记(day11)
  • Linux内核ICMP协议实现深度解析:网络控制的智慧引擎
  • 《C++初阶之STL》【auto关键字 + 范围for循环 + 迭代器】
  • 基于typescript严格模式以实现undo和redo功能为目标的命令模式代码参考
  • Python-TCP编程-UDP编程-SocketServer-IO各种概念及多路复用-asyncio-学习笔记
  • 从0开始学习R语言--Day49--Lasso-Cox 回归
  • 在UniApp中防止页面上下拖动的方法
  • git@github.com: Permission denied (publickey).
  • 算法竞赛备赛——【图论】求最短路径——Dijkstra
  • 排序算法—交换排序(冒泡、快速)(动图演示)
  • uniapp问题总结
  • 并发事务~
  • 一种融合人工智能与图像处理的发票OCR技术,将人力从繁琐的票据处理中解放
  • 视频安全新思路:VRM视频分片错序加密技术
  • 小架构step系列17:getter-setter-toString