Autor Tema: suma de bits  (Leído 1339 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cucu

  • PIC12
  • **
  • Mensajes: 74
suma de bits
« en: 12 de Diciembre de 2008, 09:31:12 »
hola, tengo una duda que creo que es muy tonta... ¡pero no se como se hace!, el tema está en que quiero hacer el or lógico de varios bits, ejemplo:

char uno = 0b00110011;
char dos = 0b11000000;

char solucion = ¿?¿?¿?;

la solución que espero es 0b11110011 pero no me sale, pensaba que era || pero no sale el resultado que yo espero.

¿alguna idea? Gracias !

(por cierto, supongo que da igual, pero mi compilador es el C18)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: suma de bits
« Respuesta #1 en: 12 de Diciembre de 2008, 10:16:37 »
solucion = uno | dos;

Eso debería servirte.
La diferencia entre "|" y "||" es que el primero hace un OR bit a bit, y el segundo hace un OR a nivel de la condición completa. O sea, como tanto "uno" como "dos" son distintos a 0, el resultado sería "1".

Desconectado cucu

  • PIC12
  • **
  • Mensajes: 74
Re: suma de bits
« Respuesta #2 en: 12 de Diciembre de 2008, 10:36:20 »
Eso ya lo probé y tampoco funcionaba. Mi código real hace:

   unsigned char config = USART_TX_INT_OFF || USART_RX_INT_OFF || USART_ADDEN_OFF || USART_BRGH_HIGH
                  || USART_CONT_RX || USART_EIGHT_BIT || USART_ASYNCH_MODE ;


#define USART_TX_INT_OFF        0b00000000  // Transmit interrupt off
#define USART_RX_INT_OFF        0b00000000  // Receive interrupt off
#define USART_ADDEN_OFF         0b00000000  //
#define USART_BRGH_HIGH         0b00010000  // High baud rate
#define USART_CONT_RX           0b00001000  // Continuous reception
#define USART_EIGHT_BIT         0b00000000  // 8-bit data
#define USART_ASYNCH_MODE       0b00000000  // Asynchronous mode

lo que da como resultado 00011000,
si hago el cálculo con || me sale 00000001
y con | sale 11111111

No soy capaz de descubrir que está haciendo...

Gracias

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: suma de bits
« Respuesta #3 en: 12 de Diciembre de 2008, 10:58:18 »
El operador que debes usar es |, y no ||

Si no sale bien es que pasa algo raro. Revisa paso a paso simplificando la operación hasta encontrar dónde falla:
unsigned char config = USART_TX_INT_OFF | USART_RX_INT_OFF;
config = config | USART_ADDEN_OFF;
config = config | USART_BRGH_HIGH;
config = config | USART_CONT_RX;
config = config | USART_EIGHT_BIT;
config = config | USART_ASYNCH_MODE ;

Desconectado cucu

  • PIC12
  • **
  • Mensajes: 74
Re: suma de bits
« Respuesta #4 en: 12 de Diciembre de 2008, 11:34:36 »
vale, ya he descubierto donde falla no tenía nada que ver con la suma, era que los valores no eran los que yo pensaba. Gracias