A cura di: Administrator
/* * 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)_10n", n, base, n10); return 0; }
- Programmazione