La "forma" es una de las aritmentiche disponible en prácticamente todos los lenguajes de programación (He usado la primera vez con el Commodore Basic 64) . Pueden aparecer como un operador simple, como en el caso de Actionscript o Javascript que ambos utilizan el carácter "por ciento" (a% b), o como un método o instrucción. Para los desarrolladores pueden ser útiles en contextos aparentemente diferentes. Gskinner habló hace poco tiempo, mostrando algunos ejemplos clásicos pero interesante.
Más simplemente, la acción se forman entre dos números devuelve el resto de su división. Para completar, se dice que el funcionamiento del módulo es un tema muy amplio, también he tratado en el cifrado RSA ! Esta vez, sin embargo, no vamos a hablar de los códigos o sistemas de cifrado, pero las cosas útiles y mucho más fácil.
Divisible por la alternancia ...
El primer uso podemos hacer que el funcionamiento del módulo es para determinar si un número es un número divisible por b! Si el risultatto de un% b (% voy a utilizar aquí la notación para indicar la operación del módulo) es cero, lo que es divisible por b. Recuerdo cuando tuve que lidiar con un problema similar que no sabía de la operación del módulo. En el Commodore 64 que necesitaba saber si un número es divisible por 2. A la vez que utiliza esta sintaxis (He encontrado el código origionale - 1983):
1 2 3 | 10 INPUT A 12 B = A / 2: Si B = INT (B) A continuación, imprima "Aceptar el número" A "Y" EVEN ": GOTO 10 14 PRINT "el número" A "Y" ODD ": GOTO 10 |
BASIC de Commodore 64, sin embargo, no posee la operación de módulo - al menos que yo recuerde!
En la práctica que estaba haciendo exactamente lo que por su propia naturaleza hace que la tarea del módulo: verificavo que la división por 2 no tuvo descanso, en este caso verificavo que el resultado no contenía un decimal ( IF B = INT(B) )! Si la operación de división es igual a su número entero, entonces el número es impar!
Si a tener nuestro valor para ser monitoreado, lo mismo puede ser resuelto a través de:
1 2 3 | a % 2 ) == 0 ) { if ((en% 2) == 0) { / / Par } |
O, por 3, por:
1 2 3 | a % 3 ) == 0 ) { if ((un 3%) == 0) { / / Divisibilidad por 3 } |
Pequeña nota: gracias a la pista si tiene que ver con las potencias de 2 él, incluso hay una manera más rápida para comprobar si un número es par o impar. En la notación binaria, de hecho, todos los números pares tienen el primer bit a cero! Por lo tanto, el uso de los operadores lógicos, es posible saber si un número par o impar y simplemente "testanto" el primer bit:
1 2 3 | ! ( a & 1 ) ) { if ((a & 1)) { / / Par } |
En la Asamblea, por ejemplo, este es el pan de cada día! Es aún más inmediata y simple (el Motorola 68020, por ejemplo, tenía una instrucción BTST que el "encabezado" un solo bit
). – moltiplicazione bit a bit) tra il nostro valore a e 1 (chiamato maschera ). ! Las operaciones lógicas (AND, OR, NOT, XOR, etc ...), de hecho, son conocidos por ser más rápido a nivel y luego eseguzione de "máquina del tiempo" (a & 1) realiza la operación lógica AND ( & - multiplicación bits) entre el valor a y 1 (denominada máscara). Si a = 7 (00000111), por ejemplo:
1 2 3 | 00000111 Y 00000001 = 00000001; impar |
Si a = 8:
1 2 3 | 00001000 Y 00000001 = 00000000, la igualdad |
No sólo podemos comprobar los números, es decir, con el primer bit se establece en 0, y por tanto divisible por 2, pero también podemos comprobar si un número es divisible por 4, 8, 16, 32, 64, etc ... utilizando las máscaras apropiadas:
1 2 3 | ! ( a & 3 ) ) { if ((a & 3)) { / / Divisible por 4 (mask = 00000011 = 3), ya que 4 es 00000100) } |
Si los dos últimos bits son cero el número es divisible por 4! Si los últimos 3 bits (máscara 00000111) son cero el número es divisible por 8! Etcétera ![]()
Gskinner muestra el uso del módulo en el caso de la generación de los valores alterna. Un ejemplo clásico es cambiar el fondo de una lista de elementos:. Una línea blanca y gris Gskinner propone:
1 2 3 4 5 | rowIndex % 2 == 0 ) { if (rowIndex% 2 == 0) { rowColor = 0xFFFFFF; { Else {} rowColor = 0xCCCCCC; } |
En primer lugar, el código anterior se puede resolver con una única línea de código:
1 | 2 == 0 ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (rowIndex% 2 == 0) 0xFFFFFF: 0xCCCCCC;? |
Por otra parte, en este caso específico, se evitaría en realidad llevar a cabo una operación de módulo "pesada". Esta situación particular es a menudo participan en un bucle, por lo que sería "bueno" no desperdiciar ciclos de reloj de la máquina. En estos casos, me gusta el limpiador (y lógico) Solución:
1 | fooIndex == false ) ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (fooIndex = (fooIndex == false)) 0xFFFFFF: 0xCCCCCC; |
o false , a seconda di come vogliamo impostare inizialmente il nostro colore sfondo. Cuando se fooIndex valor precedentemete se establece en true o false , dependiendo de cómo nos propusimos inicialmente nuestro color de fondo. Este enfoque es más sutil y menos inmediata, a primera vista, pero más rápido, ya que realiza operaciones lógicas y de verdadero / falso. la condizione (fooIndex == false) sarà falsa e di conseguenza fooIndex verrà impostato da true a false. Si fooIndex es cierto, cuando se ejecuta la sentencia (fooIndex = (fooIndex == false) ) la condición (fooIndex == false) es falso y por lo tanto fooIndex se establecerá de true a false. verrà impostato da false a true! La segunda vez, sin embargo, la condición (fooIndex == false) será verdadera y fooIndex se establecerá de false a true! Y así sucesivamente ...
Repeticiones: el comportamiento que hay que vigilar
La aritmética finita, que es la base de la operación de la operación del módulo, se hace referencia a menudo como aritmética del reloj. Un reloj clásico con las manos tiene un dial dividido en 12 horas (12 días 12 noche más!), Suficiente para indicar una cualquiera de las 24 horas en un día. A las 08:00 am Si yo le preguntara ahora marca su reloj dentro de 18 horas, su respuesta sería 8 +18 = 26! 02:00 Pero por la noche! Involuntariamente, y tal vez sin saberlo, lo hacemos módulo de operaciones conitnuamente cuando nos ocupamos de los tiempos.
En Italia estamos acostumbrados al sistema durante 24 horas (o mixto). Cuando nos dispusimos a 16:00 quell'orario quiere decir que en otros países se conoce como las 4:00 pm. ¿Quién usa el sufijo AM / PM de distinguir de los hora nocturna DIUNE, incluso más a menudo realiza la operación del módulo, en este caso módulo de 12! Los italianos, entre otros, sin embargo, está acostumbrado a considerar las 24 horas, realizamos operaciones con Forma 24!
Cuando son las 11 am (11:00 para todos) y pensar "5 horas", respondemos italiano 5 +11 = 16 (cuatro de la tarde), un extranjero podría también responder 5 11 = 16:00. Desde 5 + 11 aritmética clásica, es, obviamente, el 16, al igual que la respuesta ajena a 16:00? Él sólo tiene que ejecutar el módulo 12 en el resultado: 5 + 11 = 16 mod 12 = 4. No es necesario que se tome una calculadora para verificar la exactitud de los cálculos, pero ¿cómo se procede todo un poco ", aparece una esfera de un reloj y coloque las manos sobre el 11 mental, añadir entonces - también visualmente - 5 horas, como por arte de magia, se encontrará realmente en el 4! Es por eso que se llaman las cuatro de la tarde del 16 ![]()
En Italia, sin embargo, se utiliza un módulo de 24, de hecho: 11 +5 = 16 mod 24 = 16. Cuando estoy a 23:00 pm, cinco horas después de la 28:00 no será, porque 28 módulo 12 = 4! 122514884225 módulo 24 = 17! Lo que pasa es que la figura de la forma número 24 nunca excede 24. Pero lo más interesante es que los números se repiten indefinidamente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | % 1 24 = 1 2% 24 = 2 3 = 24% 3 ... 22% 24 = 22 23% 24 = 23 24% 24 = 0 25% 24 = 1 26% 24 = 2 27% 24 = 3 ... 48% 24 = 0 49% 24 = 1 50% 24 = 2 51% 24 = 3 ... |
Esta repetición es una facilidad desarmante. Imagínese, por ejemplo, de tener que tener un objeto, un clip de película, de manera similar a un tablero de ajedrez, en cuatro columnas. Cree una plaza MovieClip NE, 55 × 55 píxeles y las propiedades esportiamolo panel con el nombre de Simbolo . El siguiente código tendrá nuestra MovieClip en cuatro columnas e ir "cabeza" a través de la operación del módulo:
1 2 3 4 5 6 7 |
cresce in modo indefinito. Como se puede ver en el código, la variable i ciclo for crecimiento indefinidamente. Pero la coordenada x de nuestra MovieClip nunca supera un cierto valor, y se repite indefinidamente! Aquí está un ejemplo concreto:
A través de los dos botones se puede variar el número de columnas (la forma) y el número total de elementos, utilizando el algoritmo anterior.






Últimos Comentarios
Giovambattista Fazioli : @ ale: Como se muestra @ Kevin ver en GitHub repo: https://github.com/gfazioli/Ch roma-Key
Giovambattista Fazioli : @ Kevin: Ver https://github.com/gfazioli/Ch roma-Key
Kevin : Muy buen ejemplo - le gustaría ver el fla también.!
Ludovica : Hello! Voy a explicar mi duda. Cuando escribo un post no añadir imágenes en el artículo (si es así ...
Marco : hola @ Giovan Battista Fazioli, da las gracias por todas las explicaciones de esta guía excelente. Tengo una pregunta para ...