首页 > 解决方案 > 使用枚举进行位移

问题描述

我有 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 的第 3 行不起作用。设置索引为 0 的位而不是索引为 4 的位

标签: c#bytebit

解决方案


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

您的条件如下所示: IsActive?然后 1,然后不活动(0 左移 4)又名 0


推荐阅读