O "módulo" é um dos aritmentiche disponível em quase todas as linguagens de programação (Eu usei a primeira vez com o Commodore Basic 64) . Pode aparecer como um operador simples, como no caso do Actionscript ou Javascript, que ambos usam o caráter "por cento" (b%), ou como um método ou instrução. Para os desenvolvedores podem ser úteis em contextos aparentemente diferentes. Gskinner falou recentemente, mostrando alguns exemplos clássicos, mas interessante.
Simplificando, a operação retorna dois números formam o resto da sua divisão. Para completar, dizemos que o funcionamento do módulo é um tema muito amplo, que eu discuti no a criptografia RSA ! Desta vez, porém, não falar de códigos ou cifras, mas as coisas úteis muito mais simples.
Divisível por uma alternância ...
O primeiro uso que podemos fazer a operação do módulo é determinar se um número é divisível por um número b! Se o risultatto de uma b% (% vou usar aqui a notação para indicar o funcionamento do módulo) é zero, uma é divisível por b. Eu me lembro quando eu tinha a ver com um problema como eu não sabia o funcionamento do módulo. Sobre o Commodore 64 que eu precisava saber se um número era divisível por 2. Na época eu usei esta sintaxe (eu encontrei o código origionale - ano 1983):
1 2 3 | 10 INPUT A 12 B = A / 2: IF B = INT (B) THEN PRINT "O NÚMERO OK" A "e" EQUAL ": GOTO 10 14 PRINT "O NÚMERO" A "E" ODD ": GOTO 10 |
O BASIC do Commodore 64, no entanto, não tem o módulo de operação - pelo menos que eu me lembro!
Basicamente exatamente o que eu estava fazendo isso por sua própria natureza torna a operação do módulo: 2 verificou-se que a divisão não teve descanso, neste caso, verifique se o resultado não continham decimal ( IF B = INT(B) )! Se a operação de divisão é igual ao seu total, o número é igual!
Se a ter o nosso valor a ser testado, a mesma coisa pode ser resolvida por:
1 2 3 | a % 2 ) == 0 ) { if ((2%) == 0) { / / Mesmo } |
Ou, para três, por:
1 2 3 | a % 3 ) == 0 ) { if ((3%) == 0) { / / Divisível por 3 } |
Pequena nota: graças à trilha se você tem a ver com as potências de 2 annche há um modo mais rápido para verificar se um número é par ou ímpar. Em notação binária, de fato, os números são todos iguais a zero o primeiro pedaço! Assim, usando os operadores lógicos, você pode saber se um número é par ou ímpar simplesmente "protestante" o primeiro bit:
1 2 3 | ! ( a & 1 ) ) { if ((a & 1)) { / / Mesmo } |
Na Assembleia, por exemplo, isso é pão e manteiga! É ainda mais imediata e simples (o Motorola 68020, por exemplo, tinha uma instrução BTST que "testado" apenas um único bit
). – moltiplicazione bit a bit) tra il nostro valore a e 1 (chiamato maschera ). As operações lógicas (AND, OR, NOT, XOR, etc ...), na verdade, são conhecidos por ser mais rápido em termos de corrida, e depois "máquina do tempo!" (a & 1) executa a operação lógica AND ( & - Multiplicação bitwise) entre o nosso valor a , e 1 (chamado de máscara). Se a = 7 (00000111), por exemplo:
1 2 3 | 00000111 E = 00000001 00000001; estranho |
Se a 8 =:
1 2 3 | 00001000 E = 00000001 00000000, igual |
Não só podemos verificar os números, ou seja, com o primeiro bit a 0 e, portanto, divisível por 2, mas também pode ocorrer se um número é divisível por 4, 8, 16, 32, 64, etc ... usando os formulários apropriados:
1 2 3 | ! ( a & 3 ) ) { if ((a & 3)) { / / Divisível por 4 (máscara = 00000011 = 3), desde 4 é 00000100) } |
Se os últimos dois bits são definidos como zero o número é divisível por 4! Se os últimos 3 bits (máscara 00.000.111) são a zero o número é divisível por 8! E assim por diante ![]()
Gskinner mostra o uso do módulo, nos casos de geração alternativa de valores. Um exemplo clássico é para mudar o fundo de uma lista de itens:. Um branco e um cinza Gskinner oferece:
1 2 3 4 5 | rowIndex % 2 == 0 ) { if (rowIndex% 2 == 0) { rowColor = 0xFFFFFF; { Else {} rowColor = 0xCCCCCC; } |
Primeiro de tudo, o código acima pode ser resolvido com uma única linha de código:
1 | 2 == 0 ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (rowIndex% 2 == 0) 0xFFFFFF: 0xCCCCCC;? |
Além disso, neste caso específico, gostaria de evitar realmente executar uma forma "pesada" da operação. Esta situação em particular é frequentemente envolvido em um loop, por isso seria "bom" para não desperdiçar ciclos de relógio da máquina. Nestes casos, eu gosto mais limpa a solução (e lógico):
1 | fooIndex == false ) ) ? 0xFFFFFF : 0xCCCCCC ; rowColor = (fooIndex = (fooIndex == false)) 0xFFFFFF: 0xCCCCCC; |
o false , a seconda di come vogliamo impostare inizialmente il nostro colore sfondo. Onde fooIndex precedentemete é um valor definido como true ou false , dependendo de como nós inicialmente definir a nossa cor de fundo. Esta abordagem é mais sutil, menos imediata, no início, mas mais rápido porque ele executa lógica verdadeiro / falso. la condizione (fooIndex == false) sarà falsa e di conseguenza fooIndex verrà impostato da true a false. Se fooIndex é verdade, quando a instrução é executada (fooIndex = (fooIndex == false) ) a condição (fooIndex == false) é falsa e, conseqüentemente, fooIndex será definido de verdadeiro para falso. verrà impostato da false a true! Na segunda vez, no entanto, a condição (fooIndex == false) é verdadeiro e, em seguida, fooIndex é definido de falso para verdadeiro! E assim por diante ...
Repetições: para assistir o comportamento
A aritmética finita, que é a base do funcionamento da operação do módulo, é muitas vezes referida como aritmética do relógio. Um relógio clássico tem um mostrador com as mãos divididas em 12 horas (12 mais 12 dias a noite!), Suficiente para indicar qualquer um dos 24 horas por dia. At 08:00 Se eu lhe pedisse que hora o seu relógio vai marcar entre 18 horas, a sua resposta seria 8 +18 = 26! Mas a 02:00 da noite! Involuntariamente e sem o saber, talvez, realizar operações conitnuamente formulário sempre que estamos lidando com os tempos.
Na Itália, são usados para o sistema 24 horas (ou mista). Quando apontamos às 16:00 pretendem que hora do que em outros países é indicado como 04:00 pm. Quem usa o postfix am / pm para distinguir daqueles horas da noite ofa, mesmo com mais freqüência realiza a operação do módulo, módulo 12, neste caso! Nós, italianos, e outros, no entanto, ser acostumado a considerar as 24 horas, realizar operações com Form 24!
Quando estou 11 horas da manhã (11:00 para todos) e pensar "em cinco horas", os italianos respondem 5 +11 = 16 (quatro da tarde), um estranho poderia também responder 5 +11 = 4:00. Desde 5 + 11 aritmética clássica, é, obviamente, 16, como fez o estranho para atender quatro horas? Ele simplesmente executar o módulo 12 sobre o resultado: 5 + 11 = 12 = 16 mod 4. Não é necessário que você tome uma calculadora para verificar a precisão do cálculo, mas esses passos são um pouco de tudo, mostrou uma face de um relógio e colocar as mãos nos 11 mentalmente, em seguida, adicione - sempre visualmente - 5 horas, como que por magia você realmente cerca de 4! É por isso que eles são chamados de quatro da tarde 16 ![]()
Na Itália, em vez disso, usamos um Form 24, na verdade: 11 +5 = 16 mod 24 = 16. Quando estou às 23:00 horas, cinco horas depois do 28:00 não será, porque 28 modulo 12 = 4! 122514884225 Formulário 24 = 17! O que acontece é que o resultado fundamental do Formulário 24 nunca será superior a 24. Mas o mais interessante é que os números são repetidos 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 repetição é uma facilidade desarmante. Imagine, por exemplo, eles devem ter um objeto, um MovieClip, semelhante a um tabuleiro de xadrez, em quatro colunas. Criar um MovieClip quandrato, 55 × 55 pixels e esportiamolo painel de propriedades como Simbolo . O código a seguir terá quatro colunas do nosso MovieClip e "cabeça" com a operação do módulo:
1 2 3 4 5 6 7 |
cresce in modo indefinito. Como você pode ver a partir do código, a variável i ciclo for crescimento indefinidamente. Mas a coordenada x do nosso MovieClip nunca excede um certo valor, e se repete indefinidamente! Aqui está um exemplo concreto:
Através dos dois botões você pode variar o número de colunas (a forma) eo número total de elementos, usando o algoritmo acima.










Um comentário: "A forma aritmética"
Deixe um comentário