嵌入式学习的第十七天-结构体+共用体+位运算

一、结构体

1.声明一个结构体类型的一般形式为:

struct 结构体名 //struct关键字不能省略,结构体名可省略

{成员列表};

对成员进行声明:类型名 成员名

2.计算 sizeof(struct Students)问题

:上图中需为8字节的整数倍,int 为4字节,0能将4整除,放入4个字节,4能将1整除,放入1个字节,5不能将2整除,往后移一位,6能将2整除,放入2个字节,一共占8个字节。

:结构体之间不能进行比较操作

小口诀

  • 1、默认按照计算机位数对齐;64/8=8最终大小必须是8的整数倍;
  • 2、从结构体中的成员中查找最大字节的成员,最终按此成员大小对齐;
  • 3、把每个成员按照声明顺序依次存放入内存,偏移量/sizeof(成员)必须能够整除

 二、共用体

1.赋值最后一个成员的内存,所有成员地址相同,共用一块内存空间

:运行结果为4

2.判断计算机的存储方式

 方法一:共用体

方法二:指针

3.用途:协议 彼此成员之间相互覆盖,共享同一段内存空间,提高系统效率

4.枚举:week的取值可能为其中一种,限制取值范围,其中的值可以用print("%d\n)

   打印出来,可为其中变量赋值,避免枚举值重复,

 

5.用typedef定义类型

   typede int INT;将全局变量变成数据类型的类型名

三、位运算

1.常见位运算符

:运算量类型需为整形或者是整形相兼容型

2.& - 按位与-指定位清零

  可实现点灯操作,通过电压差,将需要亮灯的地方通过&置零

int main(void)
{
	unsigned char p2 = 0xAA;

	p2 &= 0xB6;

	printf("%X\n",p2);
	return 0;

3.|-按位或-指定位置1

  可实现关灯操作,通过电压差,将需要关灯的地方通过|置1

4.^-按位或-指定位翻转,其它位不变

5.~-按位取反(单目运算符)- 全翻转

6.<<-左移-末尾补0


int main(void)
{
	unsigned char p2 = 0;
	p2 |= (1 << 6) | (1 << 3) | (1 << 0);
	printf("%X\n",p2);
	return 0;
}

7.<<-右移-开头补0

:有符号的右移为算数右移,无符号的为逻辑右移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值