Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - funzione
Forum - C/C++ - funzione

Avatar
frankus89 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/02/2009

Segnala al moderatore
Postato alle 10:26
Martedì, 28/07/2009
come implementereste una funzione che prese due numeri binari a k bit ne faccia la somma??

IO AVEVvo pensato a prendere delle stringhe di interi, con 1 e 0.
Non so però come gestire il riporto, nel caso ci siano due 1 nella posizione simmetrica dei due vettori.
Idee?

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 10:46
Martedì, 28/07/2009
senza complicarti troppo la vita segui l'algoritmo della somma in binario alla lettera ;)
Confronti gli interi che hai memorizzato nei vettori due alla volta.
Se sono 0 e 0 o 0 e 1 non hai problemi :P se c'è il riporto (o carry) secondo me potresti mettere il valore della somma a 0 (o a 1 ad esempio se dopo un carry c'è un 1+1) e memorizzare in un flag che c'è il carry.
Al passo successivo esegui di nuovo la somma ma sai che c'è il carry e ti comporti di conseguenza :k:

PM Quote
Avatar
frankus89 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/02/2009

Segnala al moderatore
Postato alle 11:10
Martedì, 28/07/2009
il problema è quello..
come mi comporto con il carry??

PM Quote
Avatar
dacanalr (Normal User)
Rookie


Messaggi: 26
Iscritto: 23/07/2009

Segnala al moderatore
Postato alle 11:44
Martedì, 28/07/2009
puoi fare qualcosa tipo:

if(carry)
{   somma con carry; aggiorna carry; }
else
{   somma senza carry; aggiorna carry; }

Ultima modifica effettuata da dacanalr il 28/07/2009 alle 11:45
PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 11:58
Martedì, 28/07/2009
quindi il tuo problema non è come implementare l'algoritmo ma come sommare con il carry se ho ben capito. giusto?

tu sai che in binario:
0+0 = 0
0+1 = 1+0 = 1
1+1 = 0 con riporto di 1

quando hai il carry
0+0 = 1
0+1 = 1+0 = 0 con carry di 1
1+1 = 1 con carry di 1

Se invece ho capito male e il tuo problema è implementare l'algoritmo ti ripeto, usa un flag e quando vedi il carry settalo a TRUE.
la volta dopo esegui l'operazione sapendo che c'è il carry e lo rimetti a FALSE o TRUE a seconda della situazione ;)

PM Quote
Avatar
andrea.b89 (Ex-Member)
Pro


Messaggi: 129
Iscritto: 03/03/2009

Segnala al moderatore
Postato alle 23:23
Mercoledì, 29/07/2009
Beh, volendo potresti applicare lo stesso modo di fare la somma del circuito Full Adder.

Consiste nella seguente cosa :

Considerando : A e B i 2 bit da sommare e C il carry precedente

La somma dei S di A e B è : S = A ^ B ^ C
Il nuovo carry newC di A e B è : newC = (A & B) | (C & S)

In questo modo sommi 2 bit. Lo fai per N bit e sei a posto :k:

PM Quote