Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    somma algebrica in base 2

    Salve, ho bisogno di fare un'addizione del tipo

    010 +
    010 =
    -------
    100

    I numeri A e B sono memorizzati in un BitSet, classe che purtroppo non prevede la somma algebrica...

    Come risolvo?

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

    Re: somma algebrica in base 2

    Originariamente inviato da redcloud
    I numeri A e B sono memorizzati in un BitSet, classe che purtroppo non prevede la somma algebrica...

    Come risolvo?
    Ci sono almeno due modi (che conosco) per fare una addizione lavorando sui singoli bit:

    a) Usare la stessa identica logica che si userebbe se si volesse fare a mano una addizione (questo concetto vale per qualunque base, sia 2, 10 o altro). Si parte dalle due cifre meno significative, si addizionano e si ottiene una cifra di risultato e un riporto (carry). Si sommano le due cifre appena più a sinistra, sommando anche il riporto e così via. (per generalizzare, il riporto iniziale è 0).

    b) Usare la stessa logica che viene usata in un circuito digitale che si chiama "half-adder". Si basa sullo XOR per ottenere la somma e sulla AND per ottenere il carry. Senza entrare in disquisizioni tecniche non inerenti la programmazione e per farla breve, una volta avevo realizzato una funzione "C" per fare la somma algebrica usando solo gli operatori bitwise su dei char:

    codice:
    char bin_sum (char a, char b)
    {
        char sum, rip;
    
        do {
            sum = a ^ b;
            rip = (a & b) << 1;
            a = sum;
            b = rip;
        } while (rip != 0);
    
        return sum;
    }
    Quale dei due modi sia più comodo, pratico e veloce da realizzare con un BitSet, non saprei dirlo con assoluta certezza. Ad occhio, direi che la soluzione a) è più semplice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.