Programmazione

  • Materia: Programmazione
  • Visto: 14644
  • Data: 06/05/2008
  • Di: Redazione StudentVille.it

Linguaggio C: conversione da numero binario a decimale

esercizio svolto o teoria

A cura di: Administrator

Download sorgente

/*
 * Prendete in input un intero contenente soltanto
 * degli 0 e degli 1, ovvero un intero "binario",
 * e visualizzate il suo equivalente decimale.
 * (Suggerimento: per prelevare le cifre del numero
 * "binario" una per volta da destra a sinistra,
 * utilizzate gli operatori di divisione e di modulo.
 * Nel sistema numerico decimale, la cifra piu' a
 * destra ha un valore posizionale di 1 e quelle che
 * si susseguono a sinistra hanno un valore posizionale
 * di 10, poi 100, poi 1000, ecc; allo stesso modo,
 * nel sistema numerico binario, la cifra piu' a
 * destra ha un valore posizionale di 1 e quelle che
 * si susseguono a sinistra hanno un valore posizionale
 * di 2, poi 4, poi 8, ecc.
 * Di conseguenza il numero 234 potra essere
 * interpretato come 4 * 1 + 3 * 10 + 2 * 100.
 * L'equivalente decimale del binario 1101 sara'
 * 1 * 1 + 0 * 2 + 1 * 4 + 1 * 8 ovvero 1 + 0 + 4 + 13
 * ovvero 13).
 *
 */
#include <stdio.h>
#define BASE 2
int
main(void)
{
    unsigned int base = BASE;
    unsigned int n, nb;
    unsigned int cifra;
    unsigned int n10 = 0;   /* valore in base 10  */
    unsigned int peso = 1;  /* peso della cifra   */
    printf("Inserire il numero in base %u: ", base);
    scanf("%u", &n);
    nb = n;
    while (nb > 0) {
	cifra = nb % 10; /* LSB, cifra a destra */
	/* controllo che la cifra appartenga alla base */
	if (cifra > BASE - 1) {
	    printf("Numero non in base %u!\n", base);
	    return 1;
	}
	n10 = n10 + cifra * peso;
	peso = peso * base;
	/* scarta la cifra piu' a destra */
	nb = nb / 10;
    }
    printf("(%u)_%u = (%u)_10\n", n, base, n10);
    return 0;
}