给定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"的值包装回零。