Autor Tema: Mi duda es que diferencia entre estas dos lineas con utillizando compuerta | or  (Leído 3269 veces)

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

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Que diferencia  hay en las siguientes notaciones, es decir funcionan de la misma manera o no? y por que?, y que funcion cumple en particular la operacion OR? (supongo yo, que es una manera de forzar el puerto B, como salida independientemente del estado en que se encuentren los pines), en fin el que sabe, sabes y el que no apela, a los colaboradores de todopic. ;-)

1)PTBDD =(0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80);

y


2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80);

Estoy jugando con 8 led, si quieren que postee el codigo lo subo.

Gracias.
« Última modificación: 31 de Marzo de 2014, 20:34:07 por cicloide2 »

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Hola, no funcionan de la misma manera, la primera forma es con el operador OR a nivel de bits, osea que hace la operación OR bit a bit de los operandos, que si no me equivoco te daría 0xFF en este caso.
La segunda forma es a nivel booleano digamos, hace la operación OR pero con el valor booleano de los operandos, que en este caso de daria VERDADERO.

Saludos.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Gracias diguito_69, por la respuesta.

Al resto pido disculpas, pero después me di cuenta  que debería haber posteado mi duda, en la seccion de lenguajes de programacion. Pero asocié mal, dije para mi si estoy con un MC9S08QG8, de Freescale, debo colocar mi duda aca, en fin si la comunidad ó los moderadores deciden que debe ser así que así sea, no hay problema, si debo hacerlo yo mismo, (digo lo de trasladar la pregunta a la seccion que sea la correcta ) me lo dicen.

Saludos y gracias. :-/
« Última modificación: 03 de Abril de 2014, 19:31:03 por cicloide2 »

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Gracias Nocturno. ;-)

Ahora para  diguito_69,  es como tu dices al colocar:

2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera

 a-  PTBDD=0xFF;              // ó
  
 b-  PTBDD=0b11111111;   //verdad?

Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.

Gracias. :)
« Última modificación: 02 de Abril de 2014, 16:11:15 por cicloide2 »

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
es al revés, al usar || solo obtendrás como resultado un "verdadero", si quieres hacer que todos esten en 1, entonces debes hacer:

0x01 | 0x02 |.....
"Nada es imposible, no si puedes imaginarlo"

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Gracias Nocturno. ;-)

Ahora para  diguito_69,  es como tu dices al colocar:

2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera

 a-  PTBDD=0xFF;              // ó
  
 b-  PTBDD=0b11111111;   //verdad?

Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.

Gracias. :)

De estas tres formas solo la a y la b son equivalentes, porque como te dije anteriormente, con el operador || solo obtenes VERDADERO o FALSO, este operador generalmente lo tienes que usar solo en condiciones de los bucles for, etc., bloques if o alguna llamada a función que así lo requiera. En cualquier otro caso, como una asignación (lo que estas haciendo vos), solo lo tendrías que usar si tenes bien claro el porque lo estas haciendo.

La forma a y b serian equivalentes a la forma 1 del primer mensaje (ya lo aclaro rivale). En el caso tuyo, que estas asignando un valor constante, seria conveniente utilizar las formas a y b.

Veo que no entendiste bien lo que explique en el primer mensaje; la primera forma, con el operador | , lo hace a nivel de bit osea que si por ejemplo tengo a = b | c, y si b = 0b00110100 y c = 0b01000111, entonces

b = 0b00110100 |
c = 0b01000111
-------------------------
a = 0b01110111

La segunda forma, con el operador ||, lo hace a nivel booleano osea que si por ejemplo si tengo a = b || c y si b = VERDADERO y c = FALSO, a = VERDADERO (si b = VERDADERO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = FALSO, a = FALSO).

Espero haber sido claro.

Saludos.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
es al revés, al usar || solo obtendrás como resultado un "verdadero", si quieres hacer que todos esten en 1, entonces debes hacer:

0x01 | 0x02 |.....

Gracias rivale, fue una confucion al copiar y pegar, aclarada mi duda.

Salu2. :-/

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Gracias Nocturno. ;-)

Ahora para  diguito_69,  es como tu dices al colocar:

2)PTBDD =(0x01 || 0x02 || 0x04 || 0x08 || 0x10 || 0x20 || 0x40 || 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera

 a-  PTBDD=0xFF;              // ó
  
 b-  PTBDD=0b11111111;   //verdad?

Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.

Gracias. :)

De estas tres formas solo la a y la b son equivalentes, porque como te dije anteriormente, con el operador || solo obtenes VERDADERO o FALSO, este operador generalmente lo tienes que usar solo en condiciones de los bucles for, etc., bloques if o alguna llamada a función que así lo requiera. En cualquier otro caso, como una asignación (lo que estas haciendo vos), solo lo tendrías que usar si tenes bien claro el porque lo estas haciendo.

La forma a y b serian equivalentes a la forma 1 del primer mensaje (ya lo aclaro rivale). En el caso tuyo, que estas asignando un valor constante, seria conveniente utilizar las formas a y b.

Veo que no entendiste bien lo que explique en el primer mensaje; la primera forma, con el operador | , lo hace a nivel de bit osea que si por ejemplo tengo a = b | c, y si b = 0b00110100 y c = 0b01000111, entonces

b = 0b00110100 |
c = 0b01000111
-------------------------
a = 0b01110111

La segunda forma, con el operador ||, lo hace a nivel booleano osea que si por ejemplo si tengo a = b || c y si b = VERDADERO y c = FALSO, a = VERDADERO (si b = VERDADERO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = VERDADERO, a = VERDADERO)(si b = FALSO y c = FALSO, a = FALSO).

Espero haber sido claro.

Saludos.

Claro como el agua clara, como le postee a rivale, fue una confución al copiar y pegar, pero no estubo mal tu segunda manera de hacerme eneder, (por el ejemplo,digo), asi que gracias a tí tambien. :-/

Salu2.

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Gracias Nocturno. ;-)

Ahora para  diguito_69,  es como tu dices al colocar:

2)PTBDD =(0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera

 a-  PTBDD=0xFF;              // ó
  
 b-  PTBDD=0b11111111;   //verdad?

Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.

Gracias. :)

Corregido.

Desconectado cicloide2

  • PIC18
  • ****
  • Mensajes: 359
Gracias Nocturno. ;-)

Ahora para  diguito_69,  es como tu dices al colocar:

2)PTBDD =(0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80); // estoy configurando todo el puerto como salida, que seria lo mismo si pusiera

 a-  PTBDD=0xFF;              // ó
  
 b-  PTBDD=0b11111111;   //verdad?

Entonces estas tres formas son haceptables, o alguna de las tres es mas elegante, eficiente ó segura?.

Gracias. :)

Cooooregido ;-)


 

anything