Manipulation de bits

Fonctions

Le C possède plusieurs fonctions pour manipuler les bits d'une variable. Après l'introduction de ces fonctions, vous pourrez essayer de resoudre quelques petits puzzles.

Voici quelques petits puzzles. Le but est d'écrire quelques fonctions simple en utilisant un nombre restreint d'opérateurs et avec des constantes entre 0 et 255 seulement. Vous n'avez entre autre pas le droit d'utiliser de boucles, de conditionels, pointeurs, tableaux, macros, casts...

Vous devez aussi essayer de réduire le nombre d'opérations nécessaire dans chaque cas; c'est ça qui est le plus amusant. Si vous arrivez a améillorer la meilleur solution, contactez moi et vous aurez votre nom sur cette page (vous pouvez choisir entre publier votre solution, ou juste avoir votre nom avec votre performance. Si vous trouver une solution aussi optimale qu'une déjà présente, mais dont l'auteur à decidé de ne pas publier la solution, vous pouvez le faire).

Note: Vous pouvez utilisez autant de variables que vous voulez, l'assignation à une variable ne compte pas comme une instruction. Ainsi le code suivant a 5 instructions:

int foo(int x, int y) {
  int a = x & y;
  int b = (a ^ x) | y;
  int c = (a & b) | a;
  return c;
}

Puzzles

  1. int bitOr(int x, int y)
  2. int tmax(void)
  3. int evenBits(void)
  4. int getByte(int x, int n)
  5. int isNegative(int x)
  6. int bitMask(int h, int l)
  7. int reverseBytes(int x)
  8. int isLess(int x, int y)
  9. int conditional(int x, int y, int z)
  10. int logicalNeg(int x)
  11. int tc2sm(int x)
  12. int bitParity(int x)

Solutions

  1. int bitOr(int x, int y)
  2. int bitMask(int h, int l)
retour à la page complément

Alok Menghrajani <alok.menghrajani@epfl.ch>