C 位域和共用体联合使用

1.字节对齐

#pragma pack(1) // 1字节对齐

#pragma pack() // 取消字节对齐

2.位域

以下面的16位寄存器为例
在这里插入图片描述

struct TIMx_CTRL1
{
	unsigned short cnten:1;
	unsigned short updis:1;
	unsigned short uprs:1;
	unsigned short onepm:1;
	unsigned short :3;	//空域
	unsigned short arpen:1;
	unsigned short :8;	//空域
}data_bits;

3.共用体

共用体是一种数据类型,实现在相同的位置存储不同的数据类型,但是在某一时刻只能保存一种数据。

#include <stdio.h>

union data{
    int n;
    char ch;
    short m;
};

int main(){
    union data a;
    printf("%d, %d\n", sizeof(a), sizeof(union data) );
    a.n = 0x40;
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
    a.ch = '9';
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
    a.m = 0x2059;
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
    a.n = 0x3E25AD54;
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
   
    return 0;
}

运行结果:

4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54

4.位域和共用体联合使用

#include <stdio.h>
#pragma pack(1) // 1字节对齐
typedef union 
{
	struct TIMx_CTRL1
	{
		unsigned short cnten:1;	// 0bit
		unsigned short updis:1;	// 1bit
		unsigned short uprs:1;	// 2bit
		unsigned short onepm:1;	// 3bit
		unsigned short :3;		// 4_6bit空域
		unsigned short arpen:1;	// 7bit
		unsigned short :8;		// 8_15bit空域
	}data_bits;
	unsigned short tinx_ctrl1;
}tinx_ctrl1_t;
#pragma pack() // 取消字节对齐

int main()
{
	tinx_ctrl1_t test;
	
	test.data_bits.cnten = 1;
	test.data_bits.uprs = 1;
	test.data_bits.arpen = 1;

   printf("TIMx_CTRL1 = 0X%X \n",test.tinx_ctrl1);

   return 0;
}

运行结果:

TIMx_CTRL1 = 0X85
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值