主要是运用 单个 char = int + '0'; 技术
#include <stdio.h>
#define MAXDIM 80
short dec2bin(int d, char *b)
{
short i = MAXDIM; /* so che b e' un array di MAXDIM + 1 char */
/* introduco il carattere di terminazione nell'ultima posizione dell'array b */
b[MAXDIM] = 0;
/* ciclo trovando una cifra binaria per volta, dalla meno significativa alla */
/* piu' significativa; in altri termini, da destra a sinistra */
do {
/* sommo '0' per passare dal valore intero 0 o 1 al valore del codice */
/* ASCII di '0' o '1' */
b[--i] = (d % 2) + '0';
d /= 2;
} while(d >= 1);
/* i adesso e' la posizione iniziale in b della stringa binaria */
return i;
}
int bin2dec(char *b)
{
short i,c;
int n = 0;
/* ciclo sulle cifre binarie dalla piu' significativa alla meno significativa */
for(i = 0; b[i]; i++) {
/* assegno a c il valore corrispondente alla i-esima cifra binaria */
c = b[i] - '0';
/* moltiplico *2 il valore corrispondente alle prime i-1 cifre */
n *= 2;
/* gli sommo la i-esima cifra */
n += c;
}
return n;
}
int main(void)
{
int d;
char b[MAXDIM + 1];
short i;
printf("Immetti numero (nonnegativo) in base 10 da convertire in base 2:\n");
/* uso il valore di ritorno di scanf per controllare se l'utente ha effettivamente immesso un numero */
if((scanf("%d",&d) != 1) || d < 0) {
fprintf(stderr, "Errore nell'immissione del numero nonnegativo.\n");
return -1;
}
i = dec2bin(d,b);
printf("%d in base 10 si scrive %s in base 2\n",d,&b[i]);
d = bin2dec(&b[i]);
printf("%s in base 2 equivale a %d in base 10\n",&b[i],d);
return 0;
}