我有 11 个标志定义为:
#define F1 1
#define F2 2
#define F3 3
#define F4 4
...
#define F11 11
然后在某些函数中创建一个整数,该整数可以包含这些标志中的任何一个,例如:
int a = (1 << F1) | (1 << F5) | (1 << F11) | (1 << F8);
然后将其传递给一个函数,该函数需要解码设置了哪些标志,以便在特定寄存器中设置特定位。所以我的问题是,检查设置了哪些标志的最有效方法是什么。现在我有 11 个 if 是这样的:
void foo(int a)
{
if ((a & (1 << F1)) >> F1) {
// Set bit 5 in register A.
}
if ((a & (1 << F2)) >> F2) {
// Set bit 3 in register V.
}
if ((a & (1 << F3)) >> F3) {
// Set bit 2 in register H.
}
if ((a & (1 << F4)) >> F4) {
// Set bit 1 in register V.
}
// And so on, for all 11 flags.
}
PS 这是一个 8 位微控制器。