Diferencia entre revisiones de «xor bit a bit»
De ArduWiki
(Página creada con «== Descripción == Es un operador boleano '''or''' <nowiki>||</nowiki> que permite unir dos expresiones lógicamente. {| class="wikitable col3cen" !a!!b!!a <nowiki>||</now...») |
(→Referencias) |
||
(No se muestran 12 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == Descripción == | ||
− | Es un operador | + | 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> | + | !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||0 |
|} | |} | ||
== Sintaxis == | == Sintaxis == | ||
<pre> | <pre> | ||
− | + | 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 == | ||
− | + | El valor resultante, donde cada bit es invertido si así lo dicta el segundo operando. | |
== Advertencias == | == Advertencias == | ||
− | * No confundir el operador | + | * No confundir el operador '''xor bit a bit''' <nowiki>^</nowiki>, con el operador boleano [[xor]] <nowiki>x</nowiki>. |
− | == Ejemplo == | + | == 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 == | ||
+ | <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> |
− | * [[not bit a bit]] | + | * [[xor]] <nowiki>(^)</nowiki> |
− | * [[and bit a bit]] | + | * [[not bit a bit]] <nowiki>(~)</nowiki> |
− | * [[or bit a bit]] | + | * [[and bit a bit]] <nowiki>(&)</nowiki> |
− | * [[ | + | * [[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: | + | [[Category:Operador bit a bit]] |
Revisión actual del 23:29 26 sep 2019
Contenido
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
- not (!)
- and (&&)
- or (||)
- xor (^)
- not bit a bit (~)
- and bit a bit (&)
- or bit a bit (|)
- bitshift right (>>)
- bitshift left (<<)
Referencias
- Guia de referencia de Arduino
- XOR bit a bit - Manuel Delgado Crespo
- Bitwise XOR - Playground