使用枚举进行位移

Bit shifting with enums

我有 4 个属性,想将它们移动到一个名为 controlByte 的字节中。例如,TypeEnum 有 4 个条目(0 = 未知,1 = 红色,2 = 蓝色,3 = 绿色)

代码:

 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

的位
controlByte  = (byte) (controlByte  | ((IsActive ? 1 : 0) << 4));

你的条件是这样的:IsActive? then 1, not active then (0 with 4 left shift) a.k.a 0