J'implémente un simulateur d'ordinateur en C avec le défi de ne pas utiliser les conditions (ie pas/sinon, commutateur/cas, alors que/pour, etc.). Il y a beaucoup de mux dans le matériel que je simule, donc ce serait bien si je pouvais utiliser les opérateurs de logique ternaire conditionnelle. Donc, ma question: les compilateurs C créent-ils une logique MUX à partir d'opérateurs logiques ternaires, ou créent-ils des branches?Connexion entre la logique ternaire et la logique multiplex?
Exemple:
int a, b, q, r;
/* Ternary logic */
r = q ? a : b;
/* MUX equivalent logic */
r = (q & a) | ((~q) & b)
/* Branch equivalent logic */
if (q) r = a; else r = b;
1. Je comprends qu'un opérateur ternaire est équivalent à une branche, comme je l'ai indiqué ci-dessus. Ce que je demande est, "le compilateur génère-t-il une branche au niveau de l'assemblage?" 2. Je n'ai trouvé aucune utilité pour && et || opérateurs booléens jusqu'à présent. Je vais garder votre idée en tête. 3. Je suis confus par votre utilisation du terme "nul". Mais vous avez raison, je devrais passer à ~ pour la plupart des cas (cela devait être un simple exemple de valeur de 1 bit, mais je vais le modifier). – Robz
@Robz: 1. en général, oui. –
1. Oui (il ne doit pas évaluer l'autre branche). 3. zéro – AProgrammer