Salve, sto utilizzando un algoritmo che dato un numero lo converte in una stringa di 32 bit binaria.
Ad esempio il numero 7 viene convertito nella stringa:
codice:
00000000000000000000000000000111
Il segno non viene rappresentato.
Il primo problema che riscontro è che un unsigned int mi rappresenta al massimo la potenza di 2**30.
Il mio output su stdin di questo mini programma è:
codice:
int main(int argc, char **argv)
{
printf("%d",power(2,32));
printf("%d",power(2,31));
printf("%d",power(2,30));
return 0;
}
1) 0
2)-21474836480
3)10737418240
Come vedete rappresenta al massimo 2**30, dopodichè presumo esegua il complemento a 2 perchè il numero è troppo grande,anche se uno un unsigned int e se un dovrebbe contenere 2**32 bit cioè 4 byte).
Vorrei sapere come sopperire a questo problema.
Per ora siccome non posso rappresentare numeri così grandi ho scritto l' algoritmo usando 16 bit, ecco il secondo problema:
codice:
void dec2bin (unsigned int data, short int *bitSeq)
{
unsigned int temp=data;
short int i;
for(i=15;i>=0;i--)
{
if(temp>=power(2,i)
{
bitSeq[i]=1;
temp-=power(2,i);
}
else
bitSeq[i]=0;
}
}
Dove bitSeq è un array di 16 elementi, e data è il numero da convertire.
L' algoritmo funziona perfettamente, ma ho provato senza risultato a cercare un algoritmo che facesse la stessa identica cosa senza usare la funzione power.
Come sarebbe possibile cambiare questa funzione senza utilizzare la funzione power? Non conosco altri algoritmi per la conversione in binario.
Uso mingw32 con code::blocks su windows 7 64 bit.