目标C语言 增加位掩码的部分



给定enum:

typedef NS_OPTIONS(NSUInteger, BREBreathingProgram) {
    BREBreathingProgramPaceSlowest = 0,
    BREBreathingProgramPaceSlow = 1,
    BREBreathingProgramPaceMedium = 2,
    BREBreathingProgramPaceFast = 3,
    BREBreathingProgramPaceFastest = 4,
    BREBreathingProgramExcludeHold = 1 << 3,
};

要增加BreathingProgramPace,我执行以下计算:

breathingProgram = ((breathingProgram >> 3) & 1) << 3 | (breathingProgram & 3) + 1;

这是最简单的方法吗?

根据你对这个答案的第二个评论,我正在重写答案。

您已经设置了枚举,因此前3位表示速度的单个值。

第4位表示"保持"。

您希望设置一些间距值和其他一些位。然后,您希望能够在保持其他位不变的情况下增加该速度。

这很简单。

breathingProgram++;

您所需要的只是一个简单的增量。的例子。假设你的步速设置为"慢速",并且设置为"保持"位。这给出的值为9(1表示"慢",8表示"保持")。

现在您希望将速度增加到"medium"。只需从9增加到10就可以了。

虽然这可以工作,但风险是您可能会过度增加值并开始混淆标志。

更安全(也更复杂)的方法是:

breathingProgram = (breathingProgram & 0xF8) | (((breathingProgram & 0x07) + 1) & 0x07);

这确保你不能做增量超过分配的"pace"值并进入标志区域。如果你走得太远,这实际上会将"pace"的值包装回零。

相关内容

  • 没有找到相关文章

最新更新