c++ - 如何在不检查每个元素的情况下立即检查结构的零值?

标签 c++ performance structure zero

假设我有一个 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/

相关文章:

c++ - 检查内存是否已经初始化

c++ - 如何/应该隐藏 C++ 静态成员变量和函数?

c++ - 在一个类的第一个/最后一个实例存在之前/之后调用一对函数。有没有更好的办法?

sql - 在 mysql 中,通过表的其中一个列中的不同值仅获取表中行的有效方法是什么?

performance - 计算出现次数的最有效方法?

Java Web 项目结构最佳实践

swift - 在 View 层次结构中查找元素的最佳方法

c - Visual Studio : structures: error C2440

c++ - 套接字编程中非法查找的可能原因

performance - Sqlite3插入性能测试