Afficher nombre en binaire ameliorer

Contenu du snippet

Avec les commentaires !!!

Source / Exemple :


// pour simplifier, on se met sur 16 bits :
// soit le nombre (en binaire) 'n' = 0000000101010001
// on veut afficher "101010001" (on oublie les permiers '0')
// 
// sizeof(unsigned int)*CHAR_BIT 
//  = 16  (en decimal)
// 1 << sizeof(unsigned int)*CHAR_BIT 
//  = 10000000000000000 (en binaire) ATTENTION un bit en plus !
// 1 << (sizeof(unsigned int)*CHAR_BIT - 1)
//  = 1000000000000000 (en binaire)
// 
// donc mask = 1000000000000000
// Pour savoir si le 16eme bit est a 0 ou 1, on fait
// un et entre 'n' et le mask
// *Si bit=0 => (n & mask) = 0000000000000000
// *Si bit=1 => (n & mask) = 1000000000000000
// Donc il suffit de tester 'n & mask'
// 
// if(n & mask)
//  // ici le bit 16 est 1
// else
//  // ici le bit 16 est 0
// 
// Ensuite pour passer au bit 15, on decale vers la droit
// 'mask' = 0100000000000000
// Pour cela on fait 'mask >>= 1'
// 
// 
// Pour information :
// 
// (condition) ?                valeur1 : valeur2;
//                                        |         |
//                                        |         |
//                                        |         |
//  si la condition est vrai    _______/         |
//  si la condition est fausse  ________________/
// 
// 
#include <stdio.h>    // printf
#include <limits.h>   // CHAR_BIT
#include <conio.h>    // getch
#include <stdlib.h>    // atoi
// affiche le nombre 'n' en binaire
void PrintBinaryNumber(unsigned int n)
{
unsigned int mask;
mask = 1 << (sizeof(unsigned int)*CHAR_BIT - 1);
// l'algorithme ne marche pas quand n=0 (boucle infinie)
if(n == 0)
  {
  printf("0");
  return ;
  }
// on passe les premiers zeros
while(!((mask) & n))
  {
  mask >>= 1;
  }
// on affiche a partir du pemier "1"
do
  {
  printf((n & mask) ? "1" : "0");
  }while(mask >>= 1); // on decale vers la droite 'mask'
}
// affiche les nombres que l'on rentre en binaire
int main(int argc,char **argv)
{
int   number;
char  buf[256];
// on quitte si on rentre 0 ou pas un nombre !
while((number = atoi(gets(buf))))
  {
  PrintBinaryNumber(number);
  printf("\n\n");
  }
return 0;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.