【发布时间】:2017-05-17 20:05:32
【问题描述】:
我正在尝试编写一个 C 程序,其中我将声明两个类型为 status 位域的变量,状态 a 和状态掩码。而在 status a 中我只能设置掩码中已经设置的位域。
#include<stdio.h>
typedef struct
{
unsigned int w : 1 ;
unsigned int x : 1 ;
unsigned int y : 1 ;
unsigned int z : 1 ;
}status ;
void bitset(status* a,status* b,int position)
{
/*Check for the position and set that bit only if it is set in mask.
In this case, I can set only a.x and a.z.
}
int main()
{
status a ;
status mask ;
int position ;
mask.w = 0
mask.x = 1 ;
mask.y = 0;
mask.z = 1;
position = 1 ;
bitset(&a,&b,position);
}
为此,我尝试使用 & 运算符。但它显示错误。
Q1:通过使用指向 a 和 mask 的指针如何完成函数 bitset。
Q2:有没有办法让我一次设置所有位域,比如 a = 0x10,因此只设置了 y 位。
Q3:有没有办法让我一次重置所有位,例如 a={0}。这是正确的做法吗?请帮忙。
【问题讨论】:
-
Q1去哪儿了?
-
请修复 cmets。您打开了评论但忘记关闭它。并添加能说明问题的代码
-
int position ;未初始化,mask.w和mask.y也是如此。 -
如果您使用这样的位域,您几乎可以将
w,x,y,z全部视为单独的变量,并为它们分配值。如果您想一次设置或清除多个值,那么您可能想放弃位域语法并开始使用&和|一次设置整个位范围。 -
我已经更新了问题
标签: c bits bit-fields