adminv15
Ominide
1 min. di lettura
Vota 4 / 5

Concetti Chiave

  • Il programma converte un numero binario inserito dall'utente in un numero decimale equivalente.
  • Utilizza gli operatori di divisione e modulo per estrarre le cifre del numero binario da destra a sinistra.
  • Controlla che ciascuna cifra appartenga alla base binaria (0 o 1) e segnala un errore se non lo è.
  • Calcola il valore decimale sommando i prodotti delle cifre binarie per il loro peso posizionale crescente.
  • Visualizza il risultato finale mostrando il numero binario originale e il suo equivalente decimale.

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

#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!", 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, base, n10); return 0; }

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community