противоположность enum (используя формулу) (target-c) - PullRequest
0 голосов
/ 04 июля 2010

У меня есть 4 числа 0-3, которые являются enum (target-c), и я хотел бы получить противоположное, используя формулу. Поэтому, если в формулу введено 0, возвращается 2, а если введено 2, возвращается 0 (то же самое с 1 и 3).

Причина (и это связано с программированием) в том, что я хочу получить противоположность перечисления без необходимости выполнять оператор if или switch. Но это означает, что любая формула (если это возможно) должна быть несложной, чтобы она была более эффективной, чем использование if или switch.

Ответы [ 2 ]

7 голосов
/ 04 июля 2010

Формула очень проста:

n = n ^ 2;

Битовые значения 0 - 3 и как их исключить или изменить:

n       ^10
---------------
0 = 00 : 10 = 2
1 = 01 : 11 = 3
2 = 10 : 00 = 0
3 = 11 : 01 = 1

Тест (написанный на C #):

for (int n = 0; n <= 3; n++) {
  Console.WriteLine("{0} : {1}", n, n ^ 2);
}

Выход:

0 : 2
1 : 3
2 : 0
3 : 1
0 голосов
/ 04 июля 2010
int newValue = 3 - originalValue;

Возможно приведение к вашему типу перечисления.

Редактировать: Извините, это меняет местами 0 <=> 3 и 1 <=> 2, что, как я думал, означало противоположное.

Для 0 <=> 2 и 1 <=> 3 вы можете использовать

int newValue = (originalValue + 2) % 4;
...