• Viernes 15 de Noviembre de 2024, 13:04

Autor Tema:  Operador |  (Leído 1506 veces)

11_8_88

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Operador |
« en: Sábado 11 de Diciembre de 2010, 22:38 »
0
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Operador |
« Respuesta #1 en: Domingo 12 de Diciembre de 2010, 00:28 »
0
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

11_8_88

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: Operador |
« Respuesta #2 en: Domingo 12 de Diciembre de 2010, 10:51 »
0
OK, muchas gracias menudo fallo por mi parte pensaba que 1 or 1 = 0 .

Un saludo.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Operador |
« Respuesta #3 en: Domingo 12 de Diciembre de 2010, 12:09 »
0
Eso es XOR (^ en C).