鉴于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;
这是最简单的方法吗?
答案 0 :(得分:2)
根据您对此答案的第2条评论,我正在重写答案。
您已设置枚举,因此前3位代表节奏的单个值。您的值最多可以为7。
第四位代表你的“保持”。
您希望获得一些节奏值以及其他一些位设置。然后,您希望能够在保持其他位的同时增加该速度。
这很简单。
breathingProgram++;
您只需要一个简单的增量即可。例。让我们说你的步速设置为“慢”并设置“保持”位。这给出了值9(“慢”为1,“保持”为8)。
现在您希望将速度增加到“中等”。只需从9增加到10即可。
虽然这样做有效但是你可能会过度增加值并开始弄乱标志。
更安全(也更复杂)的方式是:
breathingProgram = (breathingProgram & 0xF8) | (((breathingProgram & 0x07) + 1) & 0x07);
这可确保您无法通过分配的“节奏”值进入增量并进入标记区域。如果你走得太远,这实际上会将“节奏”值包回零。