SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: 11_8_88 en Sábado 11 de Diciembre de 2010, 22:38

Título: Operador |
Publicado por: 11_8_88 en Sábado 11 de Diciembre de 2010, 22:38
Hola a todos, estoy haciendo mis primeras pruebecillas con los operadores bit a bit tales como |, & y en el ejemplo de abajo c devuelve 896, per creo que debería ser 0, alguien me puede decir que estoy haciendo mal?, por que creo que no estoy entendiendo bien el uso de estos operadores.
Código: C
  1. #define KEY_ADD (1 << 7)
  2. #define KEY_SUB (1 << 8)
  3. #define KEY_REPORT (1 << 9)
  4. #define REPORT (KEY_ADD | KEY_SUB | KEY_REPORT)
  5.  
  6. int main(void)
  7. {
  8.     int c = (REPORT | 896);
  9.     printf("REPORT: %i " ,REPORT);
  10.     printf("REPORT: %i " , c);
  11. }
  12.  
  13.  

Muchas gracias.
Título: Re: Operador |
Publicado por: m0skit0 en Domingo 12 de Diciembre de 2010, 00:28
Veamos a ver:

Código: Text
  1. 1 << 7 = 0000 0000 1000 0000 (0x80)
  2. 1 << 8 = 0000 0001 0000 0000 (0x100)
  3. 1 << 9 = 0000 0010 0000 0000 (0x200)
  4. 896 = 0x380 = 0000 0011 1000 0000
  5.  
Haciendo un OR entre esto nos da:

Código: Text
  1. 0000 0000 1000 0000
  2. 0000 0001 0000 0000
  3. 0000 0010 0000 0000
  4. 0000 0011 1000 0000
  5. ___________________
  6. 0000 0011 1000 0000 = 0x380 = 896
  7.  

Efectivamente C es correcto  :lol:

Tabla de verdad del OR:

Código: Text
  1. 0 OR 0 = 0
  2. 0 OR 1 = 1
  3. 1 OR 0 = 1
  4. 1 OR 1 = 1
  5.  

Saludos
Título: Re: Operador |
Publicado por: 11_8_88 en Domingo 12 de Diciembre de 2010, 10:51
OK, muchas gracias menudo fallo por mi parte pensaba que 1 or 1 = 0 .

Un saludo.
Título: Re: Operador |
Publicado por: m0skit0 en Domingo 12 de Diciembre de 2010, 12:09
Eso es XOR (^ en C).