• No se han encontrado resultados

66 El decimal 3 es en binario 00000011, y el decimal 1 es 00000001 El AND lógico booleanoopera

In document Arduino Cookbook 2nd Edition (página 80-84)

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

Vea también

In document Arduino Cookbook 2nd Edition (página 80-84)