Artículos con la etiqueta 'operador ternario "

El módulo de cálculo

El "módulo" es uno de los aritmentiche disponible en casi todos los lenguajes de programación (Que lo utilicé por primera vez con la base de Commodore 64) . Puede aparecer como un operador simple, como en el caso de ActionScript o JavaScript, que utilizan el carácter "por ciento" (b%), o como un método o una instrucción. Para los desarrolladores pueden ser útiles en contextos aparentemente diferentes. Gskinner habló recientemente, que muestra algunos ejemplos clásicos, pero interesante.

En pocas palabras, la operación devuelve dos números de forma que el resto de su división. Para completar, se dice que la operación del módulo es un tema muy amplio, lo que dije en el cifrado RSA ! Esta vez, sin embargo, hablar de códigos o cifrados, pero las cosas útiles mucho más simple.

Divisible por alternar ...

El primer uso que podemos hacer la operación del módulo es determinar si un número es divisible por un número b! Si el risultatto de a% b (% usaré aquí la notación para indicar el funcionamiento del módulo) es igual a cero, uno es divisible por b. Recuerdo que cuando tenía que ver con un problema como yo 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. En el momento en que utiliza esta sintaxis (He encontrado el código origionale - año 1983):

1
2
3
10 INPUT A
12 B = A / 2: Si B = INT (B) THEN PRINT "Aceptar El Número" A "Y" EQUAL ": GOTO 10
14 print "El numero" A "Y" ODD ": GOTO 10

El BASIC de la Commodore 64, sin embargo, no tienen el módulo de operación - por lo menos que yo recuerde!

Básicamente lo que yo estaba haciendo eso por su propia naturaleza hace que el funcionamiento del módulo: 2 verificado que la división no tuvo descanso, en este caso, comprobar que el resultado no contiene decimal ( IF B = INT(B) )! Si la operación de división es igual a su total, el número es igual!

Si a tener nuestro valor a la prueba, lo mismo puede ser resuelto por:

1
2
3
a % 2 ) == 0 ) { if ((a% 2) == 0) {
/ / Incluso
}

O, por 3, por:

1
2
3
a % 3 ) == 0 ) { if ((un 3%) == 0) {
/ / Divisible por 3
}

Pequeña nota: gracias a la pista si tiene que ver con las potencias de 2 annche hay una manera más rápida de comprobar si un número es par o impar. En la notación binaria, de hecho, los números son iguales a cero el primer bit! Por lo tanto, usando los operadores lógicos, se puede saber si un número es par o impar simplemente "protestantes" que el primer bit:

1
2
3
! ( a & 1 ) ) { if ((a + 1)) {
/ / Incluso
}

En la Asamblea, por ejemplo, esto es pan de cada día! Es aún más inmediata y simple (el Motorola 68020, por ejemplo, había una instrucción BTST que "probó" un poco sola ;) ). – moltiplicazione bit a bit) tra il nostro valore a e 1 (chiamato maschera ). Las operaciones lógicas (AND, OR, NOT, XOR, etc ...), de hecho, se sabe que son más rápidos en términos de carrera, y luego "máquina del tiempo"! (a & 1) realiza la operación lógica de Y ( & - Multiplicación bit a bit) entre nuestro valor a , y 1 (llamada máscara). Si a = 7 (00000111), por ejemplo:

1
2
3
Y 00000111
= 00000001
00000001; extraño

Si a 8 =:

1
2
3
Y 00001000
= 00000001
00000000, la igualdad de

No sólo podemos ver los números, es decir, con el primer bit a 0, y por lo tanto divisible por 2, pero también puede ocurrir si un número es divisible por 4, 8, 16, 32, 64, etc ... utilizando los formularios correspondientes:

1
2
3
! ( a & 3 ) ) { if ((a + 3)) {
/ / Divisibles por 4 (mask = 00.000.011 = 3), desde el 4 es 00000100)
}

Si los dos últimos bits se ponen a cero el número es divisible por 4! Si los últimos 3 bits (máscara 00.000.111) son a 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 alternativas de valores. Un ejemplo clásico es cambiar el fondo de una lista de temas:. Blanco y gris Gskinner ofrece:

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 sola línea de código:

1
2 == 0 ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (rowIndex% 2 == 0) 0xFFFFFF: 0xCCCCCC;?

Por otra parte, en este caso, me volvería a evitar realmente realizar una "fuerte" forma de operación. 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 más limpio (y lógica): Se

1
fooIndex == false ) ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (= fooIndex (fooIndex == false)) 0xFFFFFF: 0xCCCCCC;

o false , a seconda di come vogliamo impostare inizialmente il nostro colore sfondo. Donde fooIndex precedentemete es un valor establecido en true o false , dependiendo de la forma en que inicialmente nuestro color de fondo. Este enfoque es más sutil, menos inmediato, en un primer momento, pero más rápido, ya que realiza lógica de verdadero / falso. la condizione (fooIndex == false) sarà falsa e di conseguenza fooIndex verrà impostato da true a false. Si fooIndex es verdad, cuando se ejecuta la instrucción (fooIndex = (fooIndex == false) ) la condición (fooIndex == false) es falsa y por lo tanto fooIndex se establecerá de verdadero a falso. verrà impostato da false a true! La segunda vez, sin embargo, la condición (fooIndex == false) es cierto y luego fooIndex se encuentra de false a true! Y así sucesivamente ...

Repeticiones: para ver el comportamiento

La aritmética finita, que es la base del funcionamiento de la operación del módulo, se refiere a menudo como la aritmética del reloj. Un reloj clásico tiene un disco con las manos divididas en 12 horas (12 más 12 de día y noche!), Suficiente para indicar cualquiera de las 24 horas del día. A las 08:00 AM Si te pregunté a qué hora el reloj marcará entre 18 horas, su respuesta sería de 8 +18 = 26! Pero la 2:00 de la noche! Involuntariamente y sin saberlo, tal vez, realizar operaciones de forma cada vez conitnuamente se trata de tiempos.

En Italia se utilizan para el sistema de 24 horas (o mixto). Cuando señalamos a las 16:00 horas de la intención de que en otros países se indica como 04:00 pm. ¿Quién utiliza el am postfix / h de distinguir de las horas de la noche OFA, incluso con más frecuencia realiza la operación del módulo, el módulo 12, en este caso! Los italianos, y otros, sin embargo, estar acostumbrado a considerar las 24 horas, realizar operaciones con el Formulario 24!

Cuando estoy 11 de la mañana (11:00 para todos) y que "en cinco horas", los italianos responden 5 +11 = 16 (cuatro de la tarde), un extraño podría también responder a 5 +11 = 16:00. Desde el 5 + 11 aritmética clásica, es, obviamente, 16, al igual que el extraño para satisfacer 16:00? Simplemente ejecute 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 estas medidas son "un poco de todo, muestra una cara de un reloj y colocar las manos sobre los 11 mentalmente, a continuación, añadir - siempre visualmente - 5 horas, como por arte de magia que realmente va a alrededor del 4! Es por eso que se llaman las cuatro de la tarde 16 :)

En Italia, en cambio, se utiliza un formulario 24, de hecho: 11 +5 = 16 mod 24 = 16. Cuando estoy a 23:00 pm, cinco horas después de la 28:00, no se, porque modulo 28 12 = 4! 122514884225 Formulario 24 = 17! Lo que pasa es que el resultado clave de la Forma 24 no será superior a 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% de 24 = 1
2% de 24 = 2
3% de 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. Imagine, por ejemplo, deben tener un objeto, un clip de película, similar a un tablero de ajedrez, en cuatro columnas. Crear un quandrato MovieClip, 55 × 55 píxeles y el esportiamolo panel de propiedades como Simbolo . El siguiente código tiene cuatro columnas de nuestro clip de película y la "cabeza" con la operación del módulo:

1
2
3
4
5
6
7
Number = 4 ; var col: Número = 4;
var i= 0 ; i < 12 ; i ++ ) { for (var i = 0; i <12; i + +) {
Sprite = new Simbolo ( ) ; var s: Sprite = new Symbol ();
s ) ; addChild (s);
= ( i % col ) * 60 ; s. = x (con i%) * 60;
= Math . floor ( i / col ) * 60 ; s. y = Matemáticas . piso (i / col) * 60;
}

cresce in modo indefinito. Como se puede ver en el código, la variable i ciclo for cultivo de forma indefinida. Sin embargo, la coordenada x que nunca de nuestro clip de película supera un determinado valor, y se repite indefinidamente! Aquí está un ejemplo concreto:

Cargando flash ...

A través de las dos ruedas se puede variar el número de columnas (la forma) y el número total de elementos, usando el algoritmo anterior.

Continuación ...

Consejos y Trucos: generador 0 / 1 con el operador ternario

¿Quién es el de programación C / C + + no se puede saber el operador ternario, ECMA, y luego se utilizan en PHP, JavaScript y ActionScript. Por lo tanto un simpatca "línea de código" (en este caso PHP) útil, por ejemplo, para generar las filas alternas en una tabla HTML, por ejemplo, pero significativo para muchas otras aplicaciones:

1
= $t == 0 ) ? "even" : "odd" ) (($ T = $ t == 0)? "Aún", "raro")

Recuerdo haber visto la primera vez que esta "magia" de código en un Commodore 64 (año 1984) propuesto por Compute! Boletín - Curso básico de la forma ;)

cg.jpg

Continuación ...