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);
}
}
2 réponses
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.
Ce qu'il fait est:
- Recherche du plus grand nombre
j
tel que2^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
Questions connexes
De nouvelles questions
c
C est un langage de programmation à usage général utilisé pour la programmation système (OS et embarqué), les bibliothèques, les jeux et les plateformes multiples. Cette balise doit être utilisée avec des questions générales concernant le langage C, tel que défini dans la norme ISO 9899 (la dernière version, 9899: 2018, sauf indication contraire - également balise les demandes spécifiques à la version avec c89, c99, c11, etc.). C est distinct de C ++ et il ne doit pas être combiné avec la balise C ++ en l'absence d'une raison rationnelle.