我这里有一些代码使用位集将许多 1 位值存储到一个字符中。
基本上
struct BITS_8 {
char _1:1;
(...)
char _8:1;
}
现在我试图将这些位之一作为参数传递给函数
void func(char bit){
if(bit){
// do something
}else{
// do something else
}
}
// and the call was
struct BITS_8 bits;
// all bits were set to 0 before
bits._7 = 1;
bits._8 = 0;
func(bits._8);
解决方案是在调用函数时将位单独列出:
func(bits._8 & 0x80);
但我继续进入//do something
,因为设置了其他位。我想知道这是否是正确的行为,或者我的编译器是否损坏。该编译器是一种嵌入式编译器,可为飞思卡尔 ASIC 生成代码。
编辑:2个错误:参数的传递和bits._8应该是0,否则错误将毫无意义。
澄清
我对标准对作业的评价很感兴趣
struct X{
unsigned int k:6;
unsigned int y:1;
unsigned int z:1;
}
X x;
x.k = 0;
x.y = 1;
x.z = 0;
char t = X.y;
现在应该t
包含1
or b00000010
?