Enviado em 25/05/2017 - 16:25h
Pessoal como fazer calculadora que calcula as quatro operações de bit a bit sem usar operadores aritméticos ?
Enviado em 25/05/2017 - 16:25h
Enviado em 26/05/2017 - 01:50h
Entradas: n-ésimo bit de A, n-ésimo bit de B, e o vai-um do [n-1]-ésimo bit da soma (V)Vai-um do n-ésimo bit (V[n]):
+------------------+-----+-----+-----+-----+
| V[n-1]\A[n],B[n] | 0,0 | 0,1 | 1,1 | 1,0 |
+------------------+-----+-----+-----+-----+
| 0 | 0 | 1 | 0 | 1 |
+------------------+-----+-----+-----+-----+
| 1 | 1 | 0 | 1 | 0 |
+------------------+-----+-----+-----+-----+
S[n]=(A[n]&B[n]&V[n-1])|(A[n]&~B[n]&~V[n-1])|(~A[n]&~B[n]&V[n-1])|(~A[n]&B[n]&~V[n-1])
ou
S[n]=A[n]^B[n]^V[n-1] (O sinal “^” é o operador ou-exclusivo bit a bit do C.)
Entradas: n-ésimo bit de A, n-ésimo bit de B, e o vai-um do [n-1]-ésimo bit da soma (V)Como você tem a fórmula de um V[n] qualquer, e tanto S[n] quanto V[n] dependem de V[n-1], você pode expandir esse V[n-1].
+------------------+-----+-----+-----+-----+
| V[n-1]\A[n],B[n] | 0,0 | 0,1 | 1,1 | 1,0 |
+------------------+-----+-----+-----+-----+
| 0 | 0 | 0 | 1 | 0 |
+------------------+-----+-----+-----+-----+
| 1 | 0 | 1 | 1 | 1 |
+------------------+-----+-----+-----+-----+
V[n]=(A[n]&B[n])|(A[n]&V[n-1])|(B[n]&V[n-1])
ou
V[n]=(A[n]&B[n])|(V[n-1]&(A[n]|B[n]))
V[n]=(A[n]&B[n])|(((A[n-1]&B[n-1])|(V[n-2]&(A[n-1]|B[n-1])))&(A[n]|B[n]))Essa expansão pode ser repetida até que você só tenha como componentes os bits de A e de B. Quando n=0, A[n-1]=B[n-1]=V[n-1]=0.
S[n]=A[n]^B[n]^((A[n-1]&B[n-1])|(V[n-2]&(A[n-1]|B[n-1])))
Enviado em 26/05/2017 - 06:58h
Enviado em 26/05/2017 - 15:43h
Enviado em 26/05/2017 - 20:58h
Enviado em 31/05/2017 - 09:50h
Enviado em 31/05/2017 - 17:22h
uint8_t a, b, aEb, aOUb, s, v;
a=123; // Primeira parcela.
b=99; // Segunda parcela.
aEb=a&b;
aOUb=a|b;
v=aEb; // bit 0 de v
v|=(v<<1)&aOUb; // bit 1 de v (usa valor do bit 0, levando-o para a esquerda (v<<1) mas preservando o original (|=))
v|=(v<<1)&aOUb; // bit 2 de v (usa valor dos bit 0-1, levando-os para a esquerda (v<<1) mas preservando os originais (|=))
v|=(v<<1)&aOUb; // bit 3 de v (usa valor dos bit 0-2, levando-os para a esquerda (v<<1) mas preservando os originais (|=))
v|=(v<<1)&aOUb; // bit 4 de v (usa valor dos bit 0-3, levando-os para a esquerda (v<<1) mas preservando os originais (|=))
v|=(v<<1)&aOUb; // bit 5 de v (usa valor dos bit 0-4, levando-os para a esquerda (v<<1) mas preservando os originais (|=))
v|=(v<<1)&aOUb; // bit 6 de v (usa valor dos bit 0-5, levando-os para a esquerda (v<<1) mas preservando os originais (|=))
v|=(v<<1)&aOUb; // bit 7 de v (usa valor dos bit 0-6, levando-os para a esquerda (v<<1) mas preservando os originais (|=))
s=a^b^(v<<1);
Enviado em 31/05/2017 - 17:49h
Entre na sua conta para responder.