Я бы сделал это следующим образом:
bits = (bits << 1) | a;
bits = (bits << 1) | b;
bits = (bits << 1) | c;
, что потребовало бы меньшего количества работ по техническому обслуживанию, если бы вам потребовалось добавить или удалить флаг.
Однако, сделав это, вы можете использоватьэто для switch
звучит так, как будто это плохая идея.Добавление флага удвоит число состояний, которые вам нужно обработать, и значения case
будут хрупкими и трудными для чтения.
Но если вам действительно нужно, вот другой подход:
enum
{
c_bit_offset,
b_bit_offset,
a_bit_offset
};
unsigned int bits = (a << a_bit_offset)
| (b << b_bit_offset)
| (c << c_bit_offset);
switch (bits)
{
case 0:
/* Do something. */
break;
case (1 << a_bit_offset):
/* Do something. */
break;
case (1 << a_bit_offset) | (1 << b_bit_offset):
/* Do something. */
break;
...
}
Кстати, вы, вероятно, должны использовать unsigned int
вместо int
.