C语言union内嵌struct

C语言union内嵌struct

实际开发中经常有如下的需求:

  1. 访问32位变量的整体值
  2. 访问32位变量的某些位
    为满足上面的需求骂我们经常会写这样的结构
    32位变量的
union MyUnion{
		uint32_t  v;
		struct{
			uint32_t  bit0:1;
			uint32_t  bit : 30;
			uint32_t  bit31 : 1;
		};
	}s;

以便满足需求。
那么有一个问题是,写在前面的bit0,是v的第31位,还是第0位呢?
于是就有了如下测试。

#include "stdio.h"
#include "stdint.h"
#define TEST_SINGLE_BIT
int main(void)
{
	union MyUnion{
		uint32_t  v;
		struct{
            #ifndef TEST_SINGLE_BIT
			uint32_t  bit0:1;
			uint32_t  bit : 30;
            #endif
			uint32_t  bit31 : 1;
		};
	}s;
	
	s.v = (1UL << 31);
#ifndef TEST_SINGLE_BIT
	printf("v=0X%X s.bit31=%d bit0= %d\n",s.v, s.bit31,s.bit0);
#else
    printf("v=0X%X bit0= %d\n",s.v,s.bit31);

#endif

	return 0;
}

测试结论

对于gcc,写在前面的bit为低位。
对于VS,同上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值