#include <math.h> // <cmath> en C++
double log2( double x );
float log2f( float x ); // C99
long double log2l( long double x ); // C99
Ces trois fonctions permettent de calculer le logarithme, en base 2, de la valeur passée en paramètre.
log2(32) == 5
car 25 == 32
.
La différence entre ces trois fonctions réside dans le type de données utilisé pour le paramètre et la valeur de retour (double, float ou long double).
Les fonctions log2f
et log2l
ont été ajoutées dans C99.
Ces fonctions renvoient le logarithme, en base 2, de la valeur spécifiée en paramètre.
Si x est une valeur négative, ces fonctions renvoient une valeur NaN et la variable errno
sera
initialisée à la valeur EDOM
.
Si x est nulle, ces fonctions renvoient une valeur infinie et la variable errno
sera initialisée
à la valeur ERANGE
.
L'exemple de code suivant permet de calculer le nombre de bits utilisés pour exprimer une valeur binaire donnée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <math.h> #include <stdio.h> #include <stdlib.h> /** * Cette fonction permet d'afficher sur la console la * représentation binaire de la valeur passée en paramètre. */ void printBinary( unsigned int value ) { if ( value == 0 ) { putchar('0'); return; } else if ( value == 1 ) { putchar('1'); return; } printBinary( value / 2 ); putchar( value % 2 == 0 ? '0' : '1' ); } /** * Le point d'entrée du programme. */ int main() { // On demande la saisie d'une valeur entière. printf( "Veuillez saisir un entier positif : " ); unsigned int value; scanf( "%u", &value ); // On calcul la représentation binaire du nombre saisi. printf( "La représentation binaire de %d est ", value ); printBinary( value ); printf( "\n" ); // On calcul le nombre de bits constituant ce nombre binaire. int bitCount = value > 0 ? 1 + (int) log2( value ) : 1; const char * end = (bitCount == 1 ? "" : "s"); printf( "La représentation binaire de %d prend %d bit%s.\n", value, bitCount, end ); return EXIT_SUCCESS; } |
Il est à noter que la librairie mathématique doit être ajoutée durant l'étape de "link" (édition des liens) de votre exécutable.
Cela se réalise en ajoutant l'option -lm
à votre compilateur GCC. En cas d'utilisation d'un autre compilateur, je vous renvoie vers la documentation de ce dernier.
$> gcc -o sample sample.c -lm $> ./sample Veuillez saisir un entier positif : 256 La représentation binaire de 256 est 100000000 La représentation binaie de 256 prend 9 bits. $> ./sample Veuillez saisir un entier positif : 255 La représentation binaire de 255 est 11111111 La représentation binaire de 255 prend 8 bits. $> ./sample Veuillez saisir un entier positif : 16 La représentation binaire de 16 est 10000 La représentation binaire de 16 prend 5 bits. $> ./sample Veuillez saisir un entier positif : 15 La représentation binaire de 15 est 1111 La représentation binaire de 15 prend 4 bits. $> ./sample Veuillez saisir un entier positif : 1 La représentation binaire de 1 est 1 La représentation binaire de 1 prend 1 bits. $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :