Per la soluzione di questo problema era stato richiesto l'utilizzo dell' operatore & (and tra numeri binari) e dell'operatore <<>> che spostano del numero di "posti" indicato i bit a destra o a sinistra.
L'operatore and controlla ogni bit di un numero con il rispettivo dell'altro numero e restituisce 1 solo se tutti e due i bit dei due numeri sono 1:
Esempio:
dati: x=654364363 e y=500348320 che sono rispettivamente:
x = 00100111 00000000 11001110 11001011
y = 00011101 11010010 10110101 10100000
x & y sara:
c = 00000101 00000000 10000100 10000000
Se come y prendiamo il numero tale che i bit di quel numero siano 0 tranne uno che sia 1 nella posizione interessata, possiamo ricavare il valore del bit di quella posizione tramite la formula
(x & y)/y
Se vogliamo ricavare la cifra di posizione 8 (da dx verso sx)
prendiamo y = 128
y = 00000000 00000000 00000000 10000000
da x & y riotteniamo y così (x & y)/y ci darà "1" (che è il valore dell'ottava cifra!)
Se invece l'ottava cifra di x fosse stata 0, x&y avrebbe restituito 0 (00000000 00000000 00000000 00000000) e (x & y)/y in questo caso sarebbe stato 0 (proprio come l'ottava cifra!)
Dopo ave capito questo procedimento occorre implementare un algoritmo che indichi tramite un ciclo tutte le varie cifre.
Io ho fatto 2 programmi che sono in grado di convertire qualsiasi numero in binario, uno più semplice ma che restituisce un risultato meno immediato come questo ad esempio:
1
1
0
1
0
0
1
1
0
1
1
1
0
0
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
1
0
0
(la prima cifra dell'elenco è quella che andrà a destra! e non a sinistra)
il codice di questo primo programma è il seguente:
- public class Bincon1
- {
- {
- int a = 654364363;
- int b = 1;
- int c = 0;
- while (c<32)
- {
- int cifra = ( a & b ) / b;
- b = b << 1;
- c++;
- }
- }
- }
L'altro programma un tantino + complicato parte invece da sx e ricava le cifre verso dx (la prima cifra si ricava a parte...) ha il vantaggio di restituire un risultato ordinato e più gradevole!
il codice è:
- public class Bincon2
- {
- {
- int a = 500348320;
- int b = 1073741824;//01000000 00000000 00000000 00000000
- int c = 31;
- if (a<0)//assegnazione valore prima cifra
- else
- while (c>0)// stampa delle altre 31 cifre
- {
- int cifra = ( a & b ) / b;
- b = b >> 1;
- c = c -1;
- }
- }
- }
Questo programma restituisce un risultato del tipo : 00100111000000001100111011001011
esiste un altro programma che riesce a risolvere questo problema in un modo più classico lo potete trovare in questo post.
Potete trovare tutti i miei programmi quì.
Ciao a tutti sto programmando da poco cn la scuola e ho bisogno di 1 aiuto il prof ha assegnato un esercizio qll di convertire :
RispondiEliminaRealizzare un programma java che consenta di convertire numeri in basi differente in particolare:
1)binario-->decimale
2)decimale-->binario
3)binario-->esadecimale
4)esadecimale-->decimale
consegnare:
1)una relazione sull'esperienza con analisi del problema,algoritmo risolutivo,e trace
2)il progetto netbeans completo del codice java e i test di funzionamento
3) la relazione deve essere in formato pdf
ki mi aggiunge su msne mi da na mano raga???? please francy1991@msn.com