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.