Salve a tutti ,sono un newbie nel mondo della programmazione e sto studiando a scuola il linguaggio di programmazione C + + .
Abbiamo da poco finito di studiare tutte le strutture di controllo del C + + ( quelle sequenziali , selettive(if,else,switch), iterative ( while,do-while,for) ) e siamo passati ai sottoprogrammi e abbiamo accennato da poco gli array . (non abbiamo fatto matrici , record e tutto quello che viene dopo ovviamente, quindi vi prego di usare solo le conoscenze che ho specificato di avere
)
Detto questo mi è venuta la voglia di fare un programma che ,dato dall'utente un numero decimale e un riempimento del vettore tre 8 e 32 ( che sarebbero poi i bit) , fosse in grado di stampare a video la conversione del numero in Binario Puro , Modulo e Segno , Complemento a Uno , Complemento a Due.
Per Binario Puro , Modulo e Segno , Complemento a Uno ci sono riuscito :
example.jpg
Mentre con Complemento a Due ho delle difficoltà ...
ad esempio :
il numero 5, per convertirlo in complemento a due dobbiamo per prima cosa rappresentarlo in binario (in questo esempio supponiamo di avere a disposizione 8 bit)
Tale rappresentazione del 5 verrà effettuato in questo modo: 0000 0101(5).
Se invertiamo i bit così che 0 diventa 1 e 1 diventa 0 la sequenza cambierà nel seguente modo 1111 1010.
A questo punto abbiamo ottenuto il complemento a uno del numero 5, per ottenere il complemento a due sommiamo 1, ottenendo quindi:
1111 1010 + 0000 0001 = 1111 1011 (-5).
Il risultato ottenuto è un numero binario che rappresenta il numero negativo -5 secondo il complemento a due.
Io ho problemi nel momento in cui bisogna sommare uno in binario ...
il codice che ho costruito è il seguente , so che è molto lungo , stupido e poco ottimizzato , ma come ho detto sono newbie al massimo ... quindi ho inserito dei commenti che vi facciano capire come funziona:
codice:
void ConvertitoreBinCompl2(convertitore bin,int r,int num){
//Se il numero è negativo lo rende positivo
if(num<0){
num=-num;
//Riempie il vettore di 0
for(int i=0;i<r;i++)
bin[i]=0;
//Carica il Vettore dei resti parziali del numero diviso 2 fino a quando il numero non si annulla (conversione in binario puro ma al contrario)
for(int i=0;num!=0;i++){
bin[i]=num%2;
num/=2;
}
//Scambia il bit 0 con 1 e viceversa ( conversione in complemento a uno ma al contrario)
for(int i=0;i<r;i++){
if(bin[i]==0)
bin[i]=1;
else
bin[i]=0;
}
//"Dovrebbe" sommare 1 in binario al complemento a 1 contenuto nel vettore dal passaggio precedente così da ottenere il complemento a 2 al contrario
for(int i=0;i>r;i++){
if(bin[r-i]==1)
bin[r-i]=0;
else
bin[r-i]=1;
}
if(bin[r-1]==0)
bin[r-1]=1;
//Stampa il vettore dalla fine all'inizio così da ottenere la conversione nel verso giusto del numero in complemento a 2
cout<<"\n\nIl numero in complemento a 2 e':";
for(int i=r-1;i>=0;i--)
cout<<"["<<bin[i]<<"]";
}
}
Credo che l'errore sia nella penultima parte :
codice:
for(int i=0;i>r;i++){
if(bin[r-i]==1)
bin[r-i]=0;
else
bin[r-i]=1;
}
if(bin[r-1]==0)
bin[r-1]=1;
Il risultato che ottengo è questo :
3446oft.jpg
Grazie in anticipo a chiunque voglia aiutare un nabbo all'avventura 