Сдвиг битов с перечислениями - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть 4 свойства, и я хочу переместить их в байт с именем controlByte. Например, TypeEnum имеет 4 записи (0 = Неизвестно, 1 = Красный, 2 = Синий, 3 = Зеленый)

  • Бит 0-1: TypeEnum
  • Бит 2-3: SpeedEnum
  • Бит 4: IsActive
  • Бит 5: Необязательно

Код:

 Byte controlByte = 0;
 controlByte  = (byte) (controlByte  | ((int)TypeEnum << 0));
 controlByte  = (byte) (controlByte  | ((int)SpeedEnum  << 2));
 controlByte  = (byte) (controlByte  | (IsActive ? 1 : 0 << 4));

Ожидаемый результат:

     | Optional | IsActive | Speed | Type |
 Bit 7          5          4       2      0

Я не уверен, что логика c с перечислениями верна. Но 3-я строка с IsActive не работает. Бит с индексом 0 устанавливается вместо Бита с индексом 4

1 Ответ

1 голос
/ 14 февраля 2020
controlByte  = (byte) (controlByte  | ((IsActive ? 1 : 0) << 4));

Ваше условное выражение выглядит так: IsActive? затем 1, не активен (0 с 4 левым сдвигом) или 0

...