Somma nel codice eccesso 3

oton1
Potreste riportarmi le regole per la somma nel codice eccesso 3? Anche un link. Ho cercato in rete ma non le trovo.
Grazie

Risposte
axpgn
Scusa l'ignoranza ma che roba sarebbe? È roba da superiori? È matematica o informatica?

oton1
Hai ragione: Informatica

Zero87
"oton":
Hai ragione: Informatica

Qualche dettaglio in più nella domanda non sarebbe guastato... :|
Comunque a Natale e dintorni siamo tutti più buoni... sposto nella sezione di informatica. :wink:
:smt039

oton1
:oops:
"Zero87":

Qualche dettaglio in più nella domanda non sarebbe guastato...
Si tratta di un codice BCD. Basta aggiungere 3 alle cifre BCD.
Quindi
dec -- BCD -- EX3
0 -- 0000 -- 0011
1 -- 0001 -- 0100
2 -- 0010 -- 0101
3 -- 0011 -- 0110
4.........
9 -- 1001 -- 1100

Ora, se non mi sbaglio, nella somma BCD, dopo aver fatto la somma in binario, bisogna aggiungere ad ogni cifra 0110 (6 in decimale) se si ha riporto alla cifra successiva oppure se si ottiene un codice non valido, oltre la cifra 9.
In EX3 per ogni cifra:
- se c'è riporto alla cifra successiva oppure se il codice non è valido (non è tra 0 e 9) si aggiunge 0011 (3 decimale)
- altrimenti si sottrae 3

Però non sono sicuro.

apatriarca
Dati due numeri \(x + 3\) e \(y + 3\) hai che la loro somma è \(x + y + 6\). Per ottenere la somma in eccesso 3 devi quindi sottrarre 3. Non mi è chiaro perché dovresti agire diversamente in caso di overflow.

apatriarca
Stavo pensando al caso generale di eccesso \(k\) e non al codice BCD in particolare. In questo caso particolare hai che se la somma è compresa tra \(0\) e \(9\) allora il valore della somma sarà compreso tra \(6\) e \(15\). Se non hai quindi alcun riporto alla cifra successiva puoi quindi semplicemente sottrarre \(3\) e ottenere il valore desiderato. Se la somma è invece compresa tra \(10\) e \(18\) otterrai valori tra \(0\) e \(8\) dopo la somma. Hai quindi bisogno di sommare \(3\) per ottenere il valore corretto della cifra.

oton1
devo sommare 3 anche alla cifra successiva?

oton1
Nel caso 8+14, ho riporto. Allora aggiungo 3 solo alla cifra meno significativa.
Nel caso 8+2 ho ancora riporto ma devo aggiungere 3 anche alla cifra più significativa.

apatriarca
Non ho capito cosa intendi nei due esempi. Nel caso di riporto devi aggiungere 1 alla cifra successiva (o 4 se vuoi trattarlo come un numero in eccesso 3).

oton1
Su un testo di scuola media superiore ho trovato questa regola che riporto fedelmente:"La somma in Ex3 è simile alla BCD, ma bisogna sottrarre 3 (in binario) se la somma non ha riporto, altrimenti sommare 3 a entrambe le cifre."
Mi chiedo se questa regola è corretta per quanto riguarda "entrambe le cifre".
Allora ho proposto i due esempi precedenti: in un caso, 8+2, devo sommare 3 anche alla cifra in cui ho il riporto per ottenere il codice ex3 corretto, nell'altro caso, 8+14, non devo aggiungere 3 alla cifra in cui ho riporto, perchè ho già il codice corretto.

apatriarca
Nel caso di \(8 + 2\) hai la somma in numeri esadecimali \(B_h + 5_h = 10_h\). Alla cifra meno significativa devi sommare \(3\) e alla cifra successiva (che era uguale a \(\operatorname{ex3}(0) = 3_h\)) devi sommare \(1\). Il risultato sarà quindi \(43_h\).

Nel caso di \(8 + 14\) devi agire in modo simile. Hai prima di tutto la somma della prima cifra in esadecimale uguale a \(B_h + 7_h = 12_h\). Alla cifra meno significativa devi sommare \(3\) e alla cifra successiva (uguale a \(\operatorname{ex3}(1) = 4_h\)) devi sommare \(1\). Il risultato sarà \(55_h\).

Forse il commento intendeva dire che al riporto di \(1\) andasse sommato \(3\) per poterlo sommare come una cifra in eccesso \(3\). In caso contrario non mi sembra corretto.

oton1
Grazie :D . Ho finalmente capito un mio errore: 8+2 significa 08+02 con la cifra 0 ovviamente in ex3. Quindi bisogna aggiungere 3 alla prima cifra che produce riporto e sottrarre 3 alla seconda, che non lo produce.
Quindi vale la regola come dicevi tu:
- se la cifra ha riporto bisogna aggiungere 3
- se la cifra non ha riporto bisogna sottrarre 3
Quindi "entrambe" è fuorviante, se non errato; vale solo per una nuova cifra più significativa se non inseriamo lo 0. Certamente non vale per le cifre intermedie.

Riflettevo su una differenza tra i codici BCD ed EX3: il primo può produrre codici non validi, da 10 a 15 senza produrre riporto, invece in EX3 questo non si verifica. Ti risulta?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.