#include // for uint32_t #include // // Définition d'un type entier 32 bits non signé // appelé u32 pour Unsigned 32 bits // typedef uint32_t u32; // // Macro instruction qui compare le paramètre x à y. // Normalement x correspond à la valeur issue d'un appel // de fonction. // // L'utilisation de #x transforme le x sous forme d'une // chaîne de caractères, ainsi #msb(0) devient "msb(0)". // // Si x est différent de y on affiche une erreur avec // la chaîne qui correspond à l'appel de fonction et // la chaîne qui correspond à la valeur attendue. // // #define TEST_IF_EQUAL(x,y) if (x != y) { \ std::cout << "!!! Erreur !!! " << #x << " != " << #y << std::endl; \ } else { \ std::cout << #x << " = " << #y << std::endl; \ } ... /* ------------------------------------------------------------------ QUOI Fonction qui retourne le bit le plus significatif de son opérande x. COMMENT comment allez-vous implanter la fonction VALEUR DE RETOUR Si x == 0, on retourne le code d'erreur 255 sinon, si x == 1, on retourne 0, puisque 2^0 = 1 etc. ------------------------------------------------------------------ */ u32 msb( u32 x ) { ... return ...; } /* ------------------------------------------------------------------ QUOI Fonction principale qui réalise les tests ------------------------------------------------------------------ */ int main() { // Tests liés à la fonction msb(x) TEST_IF_EQUAL( msb( 0 ), 255); TEST_IF_EQUAL( msb( 1 ), 0); TEST_IF_EQUAL( msb( 2 ), 1); TEST_IF_EQUAL( msb( 255 ), 7); TEST_IF_EQUAL( msb( 0x800F0000 ), 31); ... return EXIT_SUCCESS; }