2010-07-03 3 views
0

J'ai 4 nombres 0-3 qui est une énumération (objectif-c) et je voudrais obtenir le contraire en utilisant une formule. Donc, si 0 est mis dans la formule, il renvoie 2 et si 2 est entré alors il renvoie 0 (et même avec 1 et 3).opposé d'enum (en utilisant la formule) (objectif-c)

La raison étant (et liée à la programmation) que je veux obtenir le contraire d'une énumération sans avoir à faire une instruction if ou switch. Mais cela signifie que toute formule (s'il est possible doit peu complexe, de sorte qu'il est plus efficace que d'utiliser si ou commutateur

+0

Pourquoi voulez-vous thi s en premier lieu? Quelle serait la relation entre les valeurs du bit modifié et l'enum d'origine? Zéro n'est pas le "contraire" de 2 dans un sens réel. – TechZen

+0

Eh bien, c'est quand ils représentent les côtés d'un carré (haut est opposé de bas, gauche opposé de droite) –

Répondre

7

La formule est très simple:

n = n^2; 

Les Valeur des bits de 0 - 3 pour et comment une exclusivité ou les changements:

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

Test (écrit en C#):

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

Sortie:

0 : 2 
1 : 3 
2 : 0 
3 : 1 
+0

même commentaire que ci-dessus, cela ne fonctionnerait pas. –

+0

@Jonathan: Cela fonctionne sur mon ordinateur. – Adrian

+1

cela fonctionne - peut-être que vous pensiez que^signifiait exponentiation? C'est un bitwise exclusif ou. http://en.wikipedia.org/wiki/Bitwise_operation#XOR – Ken

0
int newValue = 3 - originalValue; 

Peut-être jeté à votre type ENUM

Edit:.. Désolé, ce swaps 0 < => 3 et 1 < => 2, que je pensais que l'on entendait à l'opposé.

Pour 0 < => 2 et 1 < => 3 vous pouvez utiliser

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

je ne sais pas comment cela fonctionne à faire 0-> 2, 1-> 3, 2-> 0, 3- > 1? –

+0

Cela ne fonctionne pas. Les valeurs du résultat doivent être '{2, 3, 0, 1}'. – Adrian

+0

Désolé, mal interprété "contraire" et étendu ... Mais xor de Guffa est probablement le meilleur moyen de le faire. Plus généralement, vous pouvez utiliser une recherche de tableau. – Eiko

Questions connexes