Diferencia entre revisiones de «xor bit a bit»

De ArduWiki
Saltar a: navegación, buscar
(Vea también)
(Ejemplo 3)
Línea 48: Línea 48:
  
 
== Ejemplo 3 ==
 
== Ejemplo 3 ==
Parpadea un LED en el pin digital 5.
+
Parpadea el LED a bordo.
 +
 
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 
void setup () {
 
void setup () {
   Serial.begin (115200);
+
   DDRB = DDRB | 32;   //Configura el pin digital 13 como OUTPUT, no altera el resto. 32=B00100000;
  DDRD = DDRD | B00100000;   //Configura el pin digital 5 como OUTPUT
 
 
}
 
}
 
void loop () {
 
void loop () {
   PORTD = PORTD ^ B00100000; //Invertido el bit 5 (pin digital 5), deja los otros intactos
+
   PORTB = PORTB ^ 32; //Invertido estado del bit 5 (pin digital 13), no altera el resto.
 
   delay(500);
 
   delay(500);
 
}
 
}

Revisión del 23:35 24 jul 2018

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