Diferencia entre revisiones de «xor bit a bit»

De ArduWiki
Saltar a: navegación, buscar
(Vea también)
(Referencias)
 
(No se muestran 11 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
Es un operador boleano '''or''' <nowiki>||</nowiki> que permite unir dos expresiones lógicamente.
+
Es un operador '''xor bit a bit''' <nowiki>^</nowiki> (or exclusivo) que establece (pone en 1) un bit sí y solo si el bit de esa posición está establecido (en 1) únicamente en uno de los operandos.
  
 
{| class="wikitable col3cen"
 
{| class="wikitable col3cen"
!a!!b!!a <nowiki>||</nowiki> b
+
!a!!b!!a <nowiki>^</nowiki> b
 
|-
 
|-
 
|0||0||0
 
|0||0||0
Línea 11: Línea 11:
 
|0||1||1
 
|0||1||1
 
|-
 
|-
|1||1||1
+
|1||1||0
 
|}
 
|}
  
 
== Sintaxis ==
 
== Sintaxis ==
 
<pre>
 
<pre>
espresion 1 || expresion 2
+
variable1 ^ variable2
 
</pre>
 
</pre>
 +
;variable1: primer operando, es la variable (de cualquier tipo) a modificar.
 +
;variable2: segundo operando, es quien va a relizar las modificaciones pertinentes.
  
 
== Retorna ==
 
== Retorna ==
Verdadero o falso.
+
El valor resultante, donde cada bit es invertido si así lo dicta el segundo operando.  
  
 
== Advertencias ==
 
== Advertencias ==
* No confundir el operador boleano '''or''' <nowiki>||</nowiki>, con el operador [[or bit a bit]] <nowiki>|</nowiki>.
+
* No confundir el operador '''xor bit a bit''' <nowiki>^</nowiki>, con el operador boleano [[xor]] <nowiki>x</nowiki>.
  
== Ejemplo ==
+
== Comentario ==
<pre>
+
* Este operador se usa a menudo para invertir cada bites (es decir si cambio de 0 a 1, o de 1 a 0) algunos de los bits en una expresión entera. '''¡Es como un [[not bit a bit]] pero con la posibilidad de ser parcial!'''
</pre>
+
* En una operación OR si hay un 1 en el bit de máscara, el bit se invierte; si hay un 0, el bit se mantiene igual.
 +
 
 +
== Ejemplo 1 ==
 +
<syntaxhighlight lang="c++">
 +
byte a = B1100;
 +
byte b = B1010;
 +
a ^ b;            //0110
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
<syntaxhighlight lang="c++">
 +
byte b = 55;
 +
b ^= b; // Así es como en lenguaje máquina se reestablece una variable a cero
 +
 
 +
b = 55;
 +
b ^= ~b; // Así es como en lenguaje máquina se reestablece una variable a su máximo valor (-1 si es con signo)
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 3 ==
 +
Parpadea el LED a bordo.
 +
 
 +
<syntaxhighlight lang="c++">
 +
void setup () {
 +
  DDRB = DDRB | 32;    //Configura el pin digital 13 como OUTPUT, no altera el resto. 32=B00100000;
 +
}
 +
void loop () {
 +
  PORTB = PORTB ^ 32;  //Invertido estado del bit 5 (pin digital 13), no altera el resto.
 +
  delay(500);
 +
}
 +
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==
* [[not]]
+
* [[not]] <nowiki>(!)</nowiki>
* [[and]]
+
* [[and]] <nowiki>(&&)</nowiki>
* [[or]]
+
* [[or]] <nowiki>(||)</nowiki>
* [[xor]]
+
* [[xor]] <nowiki>(^)</nowiki>
* [[not bit a bit]]
+
* [[not bit a bit]] <nowiki>(~)</nowiki>
* [[and bit a bit]]
+
* [[and bit a bit]] <nowiki>(&)</nowiki>
* [[or bit a bit]]
+
* [[or bit a bit]] <nowiki>(|)</nowiki>
 +
* [[bitshift right]] <nowiki>(>>)</nowiki>
 +
* [[bitshift left]] <nowiki>(<<)</nowiki>
 +
<categorytree mode=all>Funciones bit y byte</categorytree>
  
 
== Referencias ==
 
== Referencias ==
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
 
* [https://www.arduino.cc/reference/es/language/functions/time/millis/ Guia de referencia de Arduino]
 +
* [http://manueldelgadocrespo.blogspot.com/p/xor-bit-bit.html XOR bit a bit] - Manuel Delgado Crespo
 +
* [https://playground.arduino.cc/Code/BitMath/#bitwise_xor Bitwise XOR] - Playground
  
[[Category:Estructura]]
+
[[Category:Operador bit a bit]]

Revisión actual del 23:29 26 sep 2019

Descripción

Es un operador xor bit a bit ^ (or exclusivo) que establece (pone en 1) un bit sí y solo si el bit de esa posición está establecido (en 1) únicamente en uno de los operandos.

a b a ^ b
0 0 0
1 0 1
0 1 1
1 1 0

Sintaxis

variable1 ^ variable2
variable1
primer operando, es la variable (de cualquier tipo) a modificar.
variable2
segundo operando, es quien va a relizar las modificaciones pertinentes.

Retorna

El valor resultante, donde cada bit es invertido si así lo dicta el segundo operando.

Advertencias

  • No confundir el operador xor bit a bit ^, con el operador boleano xor x.

Comentario

  • Este operador se usa a menudo para invertir cada bites (es decir si cambio de 0 a 1, o de 1 a 0) algunos de los bits en una expresión entera. ¡Es como un not bit a bit pero con la posibilidad de ser parcial!
  • En una operación OR si hay un 1 en el bit de máscara, el bit se invierte; si hay un 0, el bit se mantiene igual.

Ejemplo 1

byte a = B1100;
byte b = B1010;
a ^ b;            //0110

Ejemplo 2

byte b = 55;
b ^= b; // Así es como en lenguaje máquina se reestablece una variable a cero

b = 55;
b ^= ~b; // Así es como en lenguaje máquina se reestablece una variable a su máximo valor (-1 si es con signo)

Ejemplo 3

Parpadea el LED a bordo.

void setup () {
   DDRB = DDRB | 32;    //Configura el pin digital 13 como OUTPUT, no altera el resto. 32=B00100000;
}
void loop () {
   PORTB = PORTB ^ 32;  //Invertido estado del bit 5 (pin digital 13), no altera el resto.
   delay(500);
}

Vea también


Referencias