Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387

    [C/C++] Operazioni con numeri in BCD

    Ciao a tutti,

    esistono funzioni (meglio se con il codice sorgente visto che dovrei adattarlo ad un tipo specifico di processore) che permettono di fare operazioni (piu' che altro somme e sottrazioni) con numeri in formato BCD?

    Grazie a tutti
    ...and I miss you...like the deserts miss the rain...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C/C++] Operazioni con numeri in BCD

    Originariamente inviato da vonkranz
    esistono funzioni (meglio se con il codice sorgente visto che dovrei adattarlo ad un tipo specifico di processore) che permettono di fare operazioni (piu' che altro somme e sottrazioni) con numeri in formato BCD?
    Non ci sono funzioni "standard" per questo tipo di operazioni. Comunque non è affatto difficile fare operazioni in BCD. Bisogna solo vedere su quanti digit devi operare e come li memorizzi (intendo dire se in byte o word più larghe).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387

    Re: Re: [C/C++] Operazioni con numeri in BCD

    Originariamente inviato da andbin
    Non ci sono funzioni "standard" per questo tipo di operazioni. Comunque non è affatto difficile fare operazioni in BCD. Bisogna solo vedere su quanti digit devi operare e come li memorizzi (intendo dire se in byte o word più larghe).
    Dovrei stare nell'ordine di 6 digit e ogni digit corrisponde ad un byte (se ho capito bene la tua domanda e, soprattutto, le operazioni in BCD)
    ...and I miss you...like the deserts miss the rain...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se sono solo somme e sottrazioni, non e' molto difficile ...

    Se usi un byte per cifra (BCD non packed) allora e' ancora piu' semplice ...

    Hai gia' scritto del codice e cosa non sai fare ...?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: [C/C++] Operazioni con numeri in BCD

    Originariamente inviato da vonkranz
    ogni digit corrisponde ad un byte
    Ok (perché si potrebbero anche mettere 2 digit BCD in un byte).

    Supponendo, come hai detto, che 1 byte = 1 digit BCD, la somma è semplice: sommi 2 byte con una normale addizione e se il totale è > 9, sommi ancora 6, azzeri i 4 bit alti e sai già implicitamente che il carry è 1 (per la somma sui digit più significativi).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387

    Re: Re: Re: Re: [C/C++] Operazioni con numeri in BCD

    Originariamente inviato da andbin
    Ok (perché si potrebbero anche mettere 2 digit BCD in un byte).

    Supponendo, come hai detto, che 1 byte = 1 digit BCD, la somma è semplice: sommi 2 byte con una normale addizione e se il totale è > 9, sommi ancora 6, azzeri i 4 bit alti e sai già implicitamente che il carry è 1 (per la somma sui digit più significativi).
    Ti ringrazio.
    Suppongo che la procedura sia la stessa con la sottrazione.

    ps:
    e volendo usare 2 digit per byte?
    ...and I miss you...like the deserts miss the rain...

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: [C/C++] Operazioni con numeri in BCD

    Originariamente inviato da vonkranz
    ps:
    e volendo usare 2 digit per byte?
    0x45 +
    0x68 =
    ------
    0xAD

    ovviamente 0xAD non è BCD e bisogna "correggerlo" per ottenere 0x13 (con carry=1).
    Si nota innanzitutto che la parte bassa è > 9 (basta fare una AND con 0x0F e verificare se è > 9). In tal caso si aggiunge 0x06.

    0xAD +
    0x06 =
    ------
    0xB3

    non è ancora BCD. Si nota che la parte alta è > 9 (e questo test va fatto comunque, sia che la parte bassa fosse già corretta o no).
    Si fa quindi una AND con 0xF0 e si testa se è > 0x90. In tal caso si aggiunge 0x60

    0xB3 +
    0x60 =
    -------
    0x113

    Risultato: 0x13 con carry a 1 (infatti 45 + 68 = 113)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387

    Re: Re: Re: Re: Re: Re: [C/C++] Operazioni con numeri in BCD

    Coinciso, lineare e chiarissimo.

    Ti ringrazio!
    ...and I miss you...like the deserts miss the rain...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.