Autore Topic: Somma binaria senza riporto  (Letto 325 volte)

Offline MasterChief

  • Utente junior
  • **
  • Post: 83
    • Mostra profilo
  • Dispositivo Android:
    OnePlus X
  • Sistema operativo:
    windows 10
Somma binaria senza riporto
« il: 03 Dicembre 2014, 21:55:17 CET »
Ciao a tutti ragazzi :)
Scrivo qui perché dopo 2 giorni di ricerche e ore passate a pensare non ne sono venuto a capo...
Ho bisogno di scrivere un algoritmo che dato in input un array di byte mi calcoli la somma bit a bit (di ogni byte dell'array) senza tener conto del riporto e poi mi calcoli il suo negato, che se non ricordo male si tratta del complemento a 1. Il risultato è corretto se ottengo 0 come risultato finale.

Mi serve perché sto lavorando ad un progetto dove si comunica su porta seriale232 e devo calcolare il checksum dei dati inviati/ricevuti nel modo appena descritto (il protocollo stabilisce questo calcolo e penso che io non possa farci niente se non adattarmi); il problema però penso che in Java non esista un metodo che faccia tutto ciò, o sbaglio?

Io intanto ho fatto solo la struttura generale dell'algoritmo...
Codice (Java): [Seleziona]
    private boolean checksumIsCorrect(byte[] mBuffer) {
        byte checksum = 0x00;
        for (byte b : mBuffer) {
                /* Inserimento dell'algoritmo*/
        }
        if (checksum == 0x00) {
            return true;
        } else {
            return false;
        }
    }

Qualcuno avrebbe un'idea di come fare?
Grazie per l'attenzione  :)
« Ultima modifica: 03 Dicembre 2014, 21:58:33 CET da MasterChief »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Somma binaria senza riporto
« Risposta #1 il: 04 Dicembre 2014, 08:32:29 CET »
La somma binaria bit a bit senza riporto si chiama bit-wise XOR e in java dovresti poterlo fare con l'operatore ^.

Se il checksum fosse stato lo somma dei byte, potevi comunque usare la somma standard del java che avresti usato tra numeri con segno, perchè il risultato non sarebbe cambiato (per le proprietà della rappresentazione in complemento a 2 dei numeri con segno).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MasterChief

  • Utente junior
  • **
  • Post: 83
    • Mostra profilo
  • Dispositivo Android:
    OnePlus X
  • Sistema operativo:
    windows 10
Re:Somma binaria senza riporto
« Risposta #2 il: 04 Dicembre 2014, 09:24:43 CET »
La somma binaria bit a bit senza riporto si chiama bit-wise XOR e in java dovresti poterlo fare con l'operatore ^.

Se il checksum fosse stato lo somma dei byte, potevi comunque usare la somma standard del java che avresti usato tra numeri con segno, perchè il risultato non sarebbe cambiato (per le proprietà della rappresentazione in complemento a 2 dei numeri con segno).

Sì sì infatti per la somma normale non avevo problemi... il fatto del senza riporto mi ha spiazzato. Grazie mille dell'informazione.  :-)