温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Bit shifting with enums
bit byte c#

c# - 枚举移位

发布于 2020-05-03 15:21:57

我有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

我不确定枚举的逻辑是否正确。但是IsActive的第三行不起作用。设置索引为0的位而不是索引为4的位

查看更多

提问者
Stampy
被浏览
12
jalsh 2020-02-14 18:04
controlByte  = (byte) (controlByte  | ((IsActive ? 1 : 0) << 4));

您的条件读取如下:IsActive?然后1,不激活,然后(0左移4)又名0