我有一个8位移位值的枚举。我希望能够确定任何两个值之间的距离。如果值只是增加整数,这将很简单。这是我现在所拥有的。

typedef NS_ENUM(NSInteger, TestEnum) {
    TestEnumValue1 = 1 << 0,
    ...
    TestEnumValue8 = 1 << 7
};

TestEnum left = TestEnumValue8;
TestEnum right = TestEnumValue3;

TestEnum high = MAX(left, right);
TestEnum low = MIN(left, right);

int distance = 0;
int maximumEnum = 8;
int cumulativeResult = high;
for (int i = 0; i < maximumEnum; i++)
{
    cumulativeResult = cumulativeResult / 2;
    if (cumulativeResult == low)
    {
        distance = i;
        break;
    }
}
NSLog (@"Distance is %d", distance);

上面的方法似乎很有效,但这是最好的方法吗?

最佳答案

忽略使用枚举是否合适,请尝试以下操作:

TestEnum left = TestEnumValue8;
TestEnum right = TestEnumValue3;

TestEnum high = MAX(left, right);
TestEnum low = MIN(left, right);

int distance = 0;
while (low < high) {
    low <<= 1;
    distance++;
}

NSLog (@"Distance is %d", distance);

请记住,只有当leftright都设置了一个“标志”时,这才有效。

关于ios - 有没有更好的方法来确定两个枚举值之间的距离?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23483628/

10-11 23:12