gpt4 book ai didi

objective-c - 位掩码的递增部分

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:56 26 4
gpt4 key购买 nike

给定枚举:

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 位代表一个速度值。您的值最多可以为 7。

第四位代表你的“持有”。

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

这很简单。

breathingProgram++;

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

现在您希望将速度增加到“中等”。只需从 9 增加到 10 即可。

虽然这可行,但存在您可能过度增加值并开始弄乱标志的风险。

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

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

这可确保您不能将增量超过分配的“速度”值并进入标志区域。如果你走得太远,这实际上会将“速度”值换回到零。

关于objective-c - 位掩码的递增部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22467087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com