[C语言]位(Bit)参数

本文介绍了如何在C语言中使用位参数以节省内存和处理多个参数,包括直接按位写入、位域结构定义、内联体的运用以及位的读取方法,提供了两种主要的位操作技巧。
摘要由CSDN通过智能技术生成

位参数

位参数是为了节省内存、减少函数参数或其他原因,而实现的在一个数据类型中存放多个参数的方法。

位操作

接下来就要介绍如何操作位参数。

写入位

C语言并没有提供直接操作位的方法,那我们要怎么写入到位中,甚至是精确到第几位呢?

方法一

直接按照位所在位置来写入对应的数值数据。

char BitPara = 0x80;

如果有多个参数那么就可以使用 运算来添加新参数。

char BitPara = 0x80 | 0x08;

记住参数在哪一位显然让人难以接受,那么我们可以把每个参数对应的位数值写成宏,这样就不用记忆参数位置了。

#define Para1 0x80
#define Para2 0x08
char BitPara = Para1 | Para2 ;

方法二

利用C语言 位域 来进行位操作。

我们可以定义一个位域结构。

struct
{
	unsigned char Bit0 : 1;
	unsigned char Bit1 : 1;
	unsigned char Bit2 : 1;
	unsigned char Bit3 : 1;
	unsigned char Bit4 : 1;
	unsigned char Bit5 : 1;
	unsigned char Bit6 : 1;
	unsigned char Bit7 : 1;
}BitPara;

这样一来,我们操作位就十分的方便,还可以直接命名位参数。

BitPara.Bit0 = 1;
BitPara.Bit1 = 0;

还可以结合内联体,让我们既可以单独操作位,也可以直接写入位值。

union ByteBitParaUn
{
	unsigned char Byte;
	struct
	{
		unsigned char Bit0 : 1;
		unsigned char Bit1 : 1;
		unsigned char Bit2 : 1;
		unsigned char Bit3 : 1;
		unsigned char Bit4 : 1;
		unsigned char Bit5 : 1;
		unsigned char Bit6 : 1;
		unsigned char Bit7 : 1;
	}Bit;
}BBPara;

BBPara.Bit.Bit0 = 1;
BBPara.Byte |= 0x80;

读取位

现在我们已经将位参数初始化完成了,那么我们该如何知道某个位参数是什么状态呢?

方法一

使用位域结构直接进行读取。

char Para = BBPara.Bit.Bit0;

方法二

采取 运算并且结合 三元 运算来判断位的状态。

char BitPara = 0x80;
char Para = (BitPara & 0x80) ? 1 : 0;

当然也可以直接在判断、循环中直接使用。

if (BitPara & 0x80)
{	
	/*参数启用*/
}
while (BitPara & 0x80)
{
	/*参数启用*/
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值