|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 112
|
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 Codice:
#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;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
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.
__________________
Il sole è giallo Ultima modifica di yorkeiser : 13-02-2007 alle 17:30. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
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:
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;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Quote:
Hai perfettamente ragione: non avevo capito il senso del codice leggendo l'OR, ma con lo XOR è effettivamente un half-adder con carry
__________________
Il sole è giallo |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:12.



















