я 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, если:
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.
}
P.S. Это для 8-разрядного микроконтроллера.
@ M.M Да, вы правы. Я починил это. – user1806687