View Full Version : somma binaria con operatori bitwise (c)
devo effettuare la somma binaria di due char.
questo mi restitusce un semplice or in quanto a+b=ad un carattere speciale
mentre a me restituisce c
chi mi da una mano?grazie
#include <stdio.h>
#include <stdlib.h>
int main()
{
char a,b,sum,rip;
a='a';
b='b';
rip =1;
printf("somma a+b = %c \n",a+b);
while(rip>0)
{
sum=a|b;
rip=a&b;
rip=rip<<1;
a=sum; b=rip;
}
printf("\n%c\n",a);
system("pause");
return 0;
}
yorkeiser
13-02-2007, 16:25
Devi filtrare i singoli bit con degli AND, altrimenti fai la somma di tutti i bit in contemporanea e non quella bit a bit.
Ad esempio, per filtrare il lsb di a, avresti a & 1
Per il secondo da destra: a & 2
Per il terzo: a & 4
e così via. Lo stesso per b
A occhio, nonostante hai un AND nel tuo codice, non mi sembra che faccia esattamente la stessa cosa.
Se l'obiettivo è quello di ottenere il risultato di una somma algebrica usando però solo operazioni logiche sui bit (spero di aver capito bene il quesito di robs05), si può fare:
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;
}Il concetto è quello tipico di un "half-adder". Con uno XOR si ottiene la somma e con una AND si ottiene il carry.
yorkeiser
13-02-2007, 17:28
Se l'obiettivo è quello di ottenere il risultato di una somma algebrica usando però solo operazioni logiche sui bit (spero di aver capito bene il quesito di robs05), si può fare:
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;
}Il concetto è quello tipico di un "half-adder". Con uno XOR si ottiene la somma e con una AND si ottiene il carry.
Hai perfettamente ragione: non avevo capito il senso del codice leggendo l'OR, ma con lo XOR è effettivamente un half-adder con carry
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.