en cada bit. Los bits más a la derecha son ambos 1, así la resultado de AND es 1. Moviendo a la izquierda, los próximos bits son 1 y 0; AND resulta estos en 0. Todos los bits restantes son 0,así el resultado lógico booleano de estos será 0. En otras palabras, para cada posición de bit donde hay un1 enambos lugares, la resultado tendrá un 1; de lo contrario, lo tendrá un 0. Así, 11 & 01es igual a 1.
Las Tablas 2-6,2-7, y 2-8 deberían ayudarle a aclarar los valores lógicos booleano AND, OR y OR exclusivo.
Tabla2-6.AND lógico booleano
Bit1 Bit2 Bit1 andBit2
Tabla2-7.OR lógico booleano
Bit1 Bit2 Bit1 orBit2
Tabla2-8.Or exclusivo lógico booleano
Bit1 Bit2 Bit1 ^Bit2
Todas las expresiones lógicas booleanas funcionan en dos valores, excepto para el operador negación. Este simplemente invierte cada bit, así 0 se convierte en 1 y 1 se convierte en 0. En el ejemplo, el valor byte (8 bits) 00000001 se convierte en 11111110. El valor int tiene 16 bits, así que cuando cada uno es invertido, el resultado es 15 unos seguidos por un solo cero.
Véase también
La referencia Arduino para los operadores lógicos booleanos AND, OR, y OR Exclusivo:
67
2.21
Combinando
Operaciones
y
Asignación
Problema
Usted quiere a entender y utilizar operadores compuestos. No es raro a ver código publicado que usa expresiones que hacen más de una cosa en una sola declaración. Usted quiere entender a+ = b, a>> =b, y a &=b.
Solución
La Tabla2-9 muestra los operadores compuestos de asignación y su equivalente completa expresión.
Tabla2-9.Operadores compuestos
Operador Ejemplo Expresión equivalente
+ = valor+ = 5; valor=valor+5;//añade5alvalor - = valor- = 4; valor=valor-4;//sustrae4desdevalor * = valor* = 3; valor=valor*3;//multiplica elvalorpor3 / = valor/ = 2; valor=valor/2;//divide elvalorpor2
>> = valor>> = 2; valor=valor>> 2; // desplaza elvalor doslugares a laderecha << = valor<< = 2; valor=valor<< 2; // desplaza elvalor doslugares a laizquierda
Y = enmascarar& = 2; enmascarar=enmascarar&2;//AND binario enmascarar con2
| = enmascarar| = 2; enmascarar=enmascarar|2;//OR binario enmascararcon2
Discusión
Estas declaraciones compuestas no son más eficiente en tiempo de ejecución que la expresión complete equivalente, y si usted es nuevo programando, use la expresión completa ya que es más clara. Codificadores Experimentados a menudo utilizan la forma más corta, por lo que es útil para reconocer las expresiones al ejecutar a través de ellas.
VéaseTambién
Ver http://www.arduino.cc/en/Reference/HomePage para un índice a las paginas de referencia para operadores compuestos.
68
CAPÍTULO
3
Usando OperadoresMatemáticos
3.0Introducción
Casi cada Sketch usa operadores matemáticos paraa manipular el valor de variables. Este capítulo proporciona una breve visión de conjunto de los más comunes operadores matemáticos. Como el capítulo anterior, este resumen es ante todo para no programadores o programadores que no están familiarizados con C o C++. Para más detalles, ver uno de los libros de referencia sobre C mencionados en el Prólogo.
3.1Sumando,Restando,
Multiplicando,
yDividiendo
Problema
Usted quiere a realizar matemáticas simples en valores en su Sketch. Usted quiere controlar el orden en que que las operaciones son realizadas y usted puede necesitar manejar diferentes tipos de variables.
Solución
Useelsiguientecódigo:
int myValue;
myValue = 1 + 2 // Suma myValue = 3 - 2; // resta myValue = 3 * 2 // multiplicación
myValue = 3/2; // división (el resultado es 1)
Discusión
Suma,resta,y multiplicaciónparaenterosfuncionamuchocomoustedespera.
69
Asegúrese que su resultado no excederá el máximo tamaño de la variable de destino. Ver la Receta2.2.
La división de tipos enteros trunca la fracción resto en la división ejemplo mostrada en esta receta de Solución; myValue será igual a 1 después de la división (Véase la Receta2.3 si su aplicación requiere resultados fraccionarios):
int valor = 1 + 2 * 3 + 4;
Declaraciones compuestas, tal como la declaración anterior, puede aparecer ambigua, pero la
prioridad (Orden) de cada operador está bien definida. La multiplicación y división tienen una
mayor prioridad que la suma y resta, así el resultado será 11. Es aconsejable utilizar parentesis en su código para hacer clara la prioridad de cálculo deseada. intvalor=1+(2*3)+4; produce el mismo resultado pero es fácil de leer.
Useparéntesissiustednecesita alterarlaprioridad,como enesteejemplo:
int valor = ((1 + 2) * 3) + 4;
El resultado será 13. La expresión en el interior de los paréntesis es calculada primero, así 1 es sumado a 2, este entonces es multiplicado por 3, y finalmente, se suma 4, resultando 13.
Véase también
Receta2.2;Receta 2.3
3.2Incrementando
yDisminuyendoValores
Problema
Ustedquiereaumentar odisminuir elvalordeunavariable.
Solución
Useelsiguientecódigo:
int myValue = 0;
miValor = miValor + 1; // esto suma uno a la variable miValor miValor + = 1; // Esto hace lo mismo que lo anterior
miValor = mivalor – 1; // esto resta uno de la miValor miValor - = 1; // Esto hace lo mismo que lo anterior
miValor = mivalor + 5; // esto añade cinco a la variable miValor miValor + = 5; // esto hace lo mismo que lo anterior
70
Discusión
Incrementar y disminuir los valores de las variables es una de las tareas más comunes de programación, y la tarjeta Arduino tiene operadores para hacer esto fácil. Incrementar un valor por uno es llamado incrementing, y disminuir este por uno es llamado decrementing. La forma larga de hacer esto es de la siguiente manera:
miValor = mivalor + 1; // esto suma uno a la variable miValor
Pero usted puede también combinar la incremento y decremento operadores con la asignar operario, como esto:
myValue + = 1 / / Esto hace lo mismo que el anterior