Je suis tombé sur ce programme pour convertir les nombres décimaux en leur équivalent binaire en C. Je ne comprends pas comment l'instruction printf fonctionne dans ce programme.

int main()
{
    int N;
    scanf("%d", &N); // Enter decimal equivalent here
    for( int j = floor(log2(N)); j >= 0; j-- ){
        printf("%d", (N >> j) & 1);
    }
}
c
-2
sportmew 11 août 2017 à 20:03

2 réponses

Meilleure réponse

Prenons un exemple pour résoudre ce problème. Supposons que vous entrez N = 65. Sa représentation binaire est - 1000001. Lorsque votre code donné le parcourt, j commencera au floor (log2 (65)), qui est 6. Ainsi, la boucle donnée s'exécutera 7 fois, ce qui signifie que 7 nombres seront imprimés ( ce qui correspond au fait que la représentation binaire de 65 a 7 chiffres).

À l'intérieur de la boucle - Le nombre est décalé de j bits à chaque fois vers la droite. Lorsque 1000001 est décalé vers la droite de 6 bits, il devient 0000001. S'il est décalé de 5, il est 0000010, et ainsi de suite. Il se réduit à un décalage de 0 bits qui est le nombre d'origine. Lorsque chacun de ces nombres décalés est égal à 1, seul le bit le moins significatif (le bit le plus à droite) reste. Et ce chiffre peut être un 0 ou un 1.

Si vous aviez remarqué que chaque décalage à droite divise le nombre par 2. Ainsi, lorsque 1000001 est décalé de 1 pour faire 0100000, c'est la représentation binaire de 32, qui est en effet de 65/2 en C. Après tout, c'est ainsi que quelqu'un calcule manuellement la représentation binaire d'un nombre. Chaque division par 2 vous donne un chiffre (en commençant par la fin) de la représentation, et ce chiffre est un 0 ou un 1. Le & aide à obtenir le 0 ou 1.

En fin de compte, 65 devient 1000001.

1
Pushpak Raj Gautam 11 août 2017 à 17:47

Ce qu'il fait est:

  • Recherche du plus grand nombre j tel que 2^j <= N
  • Commençant au j ème bit (en partant de la droite) et se déplaçant vers la droite ...
    • couper tous les bits à droite du bit actuellement choisi
    • découpage de tous les bits à gauche du bit actuellement choisi
    • impression de la valeur du bit restant unique
1
hymie 11 août 2017 à 17:13