#include <iostream>
// 使用位域定义结构体
struct PacketFlags {
unsigned int connectionStatus : 1;
unsigned int authenticationStatus : 1;
unsigned int dataReady : 1;
unsigned int errorOccurred : 1;
unsigned int reserved : 1;
};
// 处理函数
int processPacket(PacketFlags* flags) {
if (flags->connectionStatus) {
if (flags->authenticationStatus) {
if (flags->dataReady) {
// 处理数据
std::cout << "处理数据" << std::endl;
return 0;
} else if (flags->errorOccurred) {
std::cout << "处理错误" << std::endl;
return -1;
}
} else {
std::cout << "认证失败" << std::endl;
return -2;
}
} else {
std::cout << "连接未建立" << std::endl;
return -3;
}
return -4;
}
使用位域比单独布尔变量更优的原因
- 节省内存:每个标志位只占用1位,而布尔变量通常占用1个字节(8位),在处理大量数据包时,位域能显著减少内存占用。
- 提高效率:位操作比处理单独变量的操作更加高效,尤其是在处理多个标志位时,位运算可以在一个指令周期内完成多个标志位的检查和修改。