|
|
|
![]() |
|
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 16: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: 08:06.