| OR bit a bit

Descripción

Los operadores bit a bit realizan sus cálculos a nivel de bits de las variables. Ellos ayudan a resolver una amplia gama de problemas comunes de programación. Gran parte del material de abajo es de un excelente tutorial sobre matemáticas a nivel de bits que se pueden encontrar aquí.

El operador binario OR en C++ es el símbolo de barra vertical, |. Al igual que el operador &, | opera de manera independiente en cada bit de sus dos expresiones enteras que lo rodean, pero lo que hace es diferente (por supuesto). El operador OR de dos bits es 1 si uno o ambos de los bits de entrada son 1, de lo contrario es 0. En otras palabras:

0 0 1 1 operando1 0 1 0 1 operando2 ---------- 0 1 1 1 (operando1 | operando2) - resultado devuelto

Ejemplo

Este es un ejemplo de la operación OR utiliza en un fragmento de código C++:

int a = 92; // En binario: 0000000001011100 int b = 101; // En binario: 0000000001100101 int c = a | segundo; // Resultado: 0000000001111101, o 125 en decimal.

Programa de ejemplo para Arduino Uno

Un trabajo común para los operadores AND y OR bit a bit es lo que los programadores llaman lectura-modificación-escritura en un puerto. En los microcontroladores, un puerto es un número de 8 bits que representa algo acerca de la condición de los pines. Al escribir a un puerto controla todas los pines a la vez.

PORTD es una constante integrada que se refiere a los estados de salida de los pines digitales 0,1,2,3,4,5,6,7. Si hay un 1 en una posición de bit, entonces, el pin está en estado HIGH. (Los pines deben estar configurados como salidas con el comando pinMode() ) Así que si escribimos PORTD = B00110001; hemos llevado los pines 0,4 y 5 a nivel HIGH. Un pequeño problema aquí es que también podemos cambiar el estado de los pines 0 y 1, que son utilizados por el Arduino para comunicaciones serie así que puede haber interferido con la comunicación serie.

Nuestro algoritmo para el programa es:

  • Obtener PORTD y limpiar sólo los bits correspondientes a los pines que deseamos controlar (con AND bit a bit).
  • Combinar el valor PORTD modificado con el nuevo valor para los pines bajo control (con OR bit a bit).
int i; // Variable de contador int j; void setup() { Serial.begin(9600); DDRD = DDRD | B11111100; // selecciona la dirección de los bit 2 a 7, deja 0 y 1 sin tocar (xx | 00 == xx) // igual que pinMode(pin, OUTPUT) para los pines 2 a 7 } void loop() { for (i = 0; i < 64; i++) { PORTD = PORTD & B00000011; // borra los bits 2 - 7, ldeja los pines 0 y 1 sin tocar (xx & 11 == xx) j = (i << 2); // desplaza los pines 2 - 7 de la variable - para eludir los pines 0 y 1 PORTD = PORTD | j; // combina la información de los puertos con la nueva información para los pines LED Serial.println(PORTD, BIN); // debug to show masking delay(100); } }

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit
Disclosure: Some links in this section are Amazon affiliate links. If you make a purchase through these links, we may earn a commission at no extra cost to you.
Additionally, some links direct to products from our own brand, DIYables.

※ OUR MESSAGES