假设我有一个 byte
结构,如下所示:
struct one_byte
{
char b1 : 1,
b2 : 1,
b3 : 1,
b4 : 1,
b5 : 1,
b6 : 1,
b7 : 1,
b8 : 1;
}foo;
在某些情况下,我需要检查 (foo == 0)
,然后我必须执行八个命令:
if(foo.b1 == 0 &&
foo.b2 == 0 &&
foo.b3 == 0 &&
...and so on
有没有什么轻便便捷的方法,只用一个命令就可以立即检查零值?我试过函数和模板,它们执行起来很慢。我试过 union,我的编译器不支持 bit[array]...
最佳答案
使用union , 这就是它的目的
union {
struct {
char b1:1,b2:1,b3:1,b4:1,b5:1,b6:1,b7:1,b8:1;
} bits;
unsigned char byte;
} u;
然后你可以直接分配字节
u.byte = 15;
或单独的位
u.bits.b3 = 1;
例子
int main() {
u.byte = 0;
printf("%x\n", u.byte);
u.bits.b3 = 1;
u.bits.b4 = 1;
printf("%x\n", u.byte);
return 0;
}
会输出
0
c // 12 in decimal, since b3 and b4 are set to 1
关于c++ - 如何在不检查每个元素的情况下立即检查结构的零值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14805482/