PDA

View Full Version : trasformazione da sistema decimale a binario


Manson666
08-09-2002, 22:20
mmm..stavo vedendo un tut di programmazione che parla di trasformazione da sistema decimale a quello binario...però mi sorge un dubbio....vi posto qualche riga del tut:

"L'algoritmo è abbastanza semplice :

1 - Si divide la cifra decimale per 2
2 - Se il quoziente è intero si scrive 0 se non è intero 1
3 - Si divide il quoziente ancora per 2 e si ripete il passo 3
4 - La sequenza ottenuta RIBALTATA è la rappresentazione binaria del numero decimale

Vediamolo applicato al numero decimale 145 (questo è lo schema che di solito si utilizza):




145 |
72 | 1 ( cifra - significativa )
36 | 0
18 | 0
9 | 0
4 | 1
2 | 0
1 | 0
0 | 1 (cifra + significativa )

Quindi 145 in base 10 equivale a 10010001 in base 2"

Ok prendo 145 lo divido per 2 e mi viene 72,5 quindi il quoziente è un numero decimale e segno 1....ma poi devo dividere 72 o 72,5 per 2...sul tut fa 72 e infatti segna 0 perchè 72 fratto 2 fa 36
ma se si seguissero solo le istruzioni come sono scritte con i numeretti a me veniva da fare 72,5 fratto 2 che da 36,25 e mi avrebbe fatto segnare 1 poichè è numero fratto....

per concludere devo segnare 0 e considerare 36 come 72 fratto 2 o segnare 1 e considerare che 72,5 fa 36,25?

recoil
08-09-2002, 23:05
non ho ben capito qual è il tuo dubbio, ma cmq la risposta alla tua domanda è che devi fare 72 / 36 -> 0 e non 72.5 / 2 ->1 perché tu lavori sempre con numeri interi.
0 o 1 rappresentano il resto della divisione, se il numero che dividi è pari metti 0 altrimenti 1, non c'è altro.

cionci
09-09-2002, 08:09
Se è per esercizio fai pure così...altrimenti con la printf puoi trasformare in binario qualsiasi numero intero in na sola istruzione...

Comunque, come ha detto recoil, devi usare solo la parte intera...
Poi con l'esperienza vedrai che ti vengono ad occhio...senza fare le divisioni...

Ti spiego come puoi fare...ovviamente ti devi ricordare le potenze del 2...
Ad esempio 527...
Sai che la potenza del 2 più vicina al numero è 512....527-512 =15...15 - 8 = 7...7 - 4 = 3...3 - 2 = 1...
Quindi è 2^9+2^3+2^2+2^1+2^0...in binario 10 000 0111 ;)