Articles taggés avec 'arithmétique non limitée »

Le module arithmétique

Le «module» est l'un des aritmentiche disponible sur presque tous les langages de programmation (Je l'ai utilisé la première fois avec la base Commodore 64) . Il peut apparaître comme un simple opérateur, comme dans le cas d'ActionScript ou JavaScript qui utilisent tous deux le caractère "pour cent" (b%), ou comme une méthode ou d'une instruction. Pour les développeurs peuvent être utiles dans des contextes apparemment différents. Gskinner parlé récemment, montrant quelques exemples classiques, mais intéressant.

En d'autres termes, l'opération retourne deux nombres forment le reste de leur division. Par souci d'exhaustivité, nous disons que le fonctionnement du module est un sujet très vaste, dont j'ai parlé dans le cryptage RSA ! Cette fois, cependant, ne veut pas parler de codes ou chiffres, mais les choses beaucoup plus simples et utiles.

Divisible par bascule ...

Le premier usage que nous pouvons rendre le fonctionnement de ce module est de déterminer si un nombre est divisible par un nombre b! Si le risultatto d'un b% (je vais utiliser la notation ici% pour indiquer le fonctionnement du module) est égal à zéro, a est divisible par b. Je me souviens quand j'ai eu affaire à un problème similaire ne savais pas sur le fonctionnement du module. Sur le Commodore 64 que j'avais besoin de savoir si un certain nombre est divisible par 2. A la fois, j'ai utilisé cette syntaxe (j'ai trouvé le code de origionale - année 1983):

1
2
3
10 INPUT A
12 B = A / 2: SI B = INT (B) THEN PRINT "OK LE NOMBRE" A "ET" EQUAL ": GOTO 10
14 print "Le nombre« A »ET« ODD »: GOTO 10

Le BASIC du Commodore 64, cependant, n'a pas eu le module de commande - au moins que je me souviens!

Dans la pratique, exactement ce que fait, par sa nature, rend le fonctionnement du module: verificavo que la division par 2 n'a pas de repos, dans ce cas verificavo que le résultat ne contient pas de décimal ( IF B = INT(B) )! Si l'opération de division est égal à son maximum, puis le nombre est égal!

Si a avoir notre valeur à être vérifiée, la même chose peut être résolu par:

1
2
3
a % 2 ) == 0 ) { si ((2%) == 0) {
/ / Même
}

Ou, pour 3, à partir de:

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

Petite note: grâce à la piste, si elle a à faire avec lui même des puissances de 2 il ya un moyen plus rapide pour vérifier si un nombre est pair ou impair. En notation binaire, en fait, les chiffres ont tous le premier bit égal à zéro! Ainsi, en utilisant les opérateurs logiques, vous pouvez savoir si un certain nombre, pair ou impair simplement "testanto" le premier bit:

1
2
3
! ( a & 1 ) ) { if ((a & 1)) {
/ / Même
}

Dans l'Assemblée, par exemple, c'est leur pain quotidien! Il est encore plus simple et immédiate (le Motorola 68020, par exemple, a eu une instruction BTST que "testé" un peu seul ;) ). – moltiplicazione bit a bit) tra il nostro valore a e 1 (chiamato maschera ). Les opérations logiques (ET, OU, NON, XOR, etc ...), en fait, sont notoirement rapide à niveau et puis "time machine" eseguzione! (a & 1) effectue le ET logique ( & - la multiplication au niveau du bit) entre la valeur de notre a , et 1 (appelé masque). Si a = 7 (00000111), par exemple:

1
2
3
00000111 ET
00000001 =
00000001; impair

Si a = 8:

1
2
3
00001000 ET
00000001 =
00000000; égale

Non seulement nous pouvons voir les nombres pairs, c'est à dire le premier bit à 0, et donc divisible par 2, mais peut également se produire si un nombre est divisible par 4, 8, 16, 32, 64, etc ... en utilisant les formulaires appropriés:

1
2
3
! ( a & 3 ) ) { if ((a & 3)) {
/ / Est divisible par 4 (masque = 00000011 = 3), depuis le 4 est 00000100)
}

Si les deux derniers bits sont à zéro le nombre est divisible par 4! Si les 3 derniers bits (masque 00000111) sont à zéro le nombre est divisible par 8! Et ainsi de suite :)

Gskinner montre l'utilisation du module, en cas de génération de valeurs alternées. Un exemple classique est de changer le fond d'une liste d'éléments:. Un blanc et gris Gskinner propose:

1
2
3
4
5
rowIndex % 2 == 0 ) { si (rowIndex% 2 == 0) {
appeler rowColor = 0xFFFFFF;
{ Else {}
appeler rowColor = 0xCCCCCC;
}

Tout d'abord le code ci-dessus peuvent être résolus avec une seule ligne de code suivante:

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

En outre, dans ce cas précis, ne serait pas réellement effectuer un «lourd» le fonctionnement du module. Cette situation particulière est souvent engagé dans une boucle, de sorte qu'il serait "bon" de ne pas gaspiller des cycles d'horloge de la machine. Dans ces cas, je voudrais le plus propre (et logique) solution:

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

o false , a seconda di come vogliamo impostare inizialmente il nostro colore sfondo.fooIndex precedentemete est une valeur fixée à true ou false , selon la façon dont nous avons d'abord mis notre couleur de fond. Cette approche est plus subtile, moins immédiat, dans un premier temps, mais plus rapide car elle effectue logique vrai / faux. la condizione (fooIndex == false) sarà falsa e di conseguenza fooIndex verrà impostato da true a false. Si fooIndex est vrai, lorsque l'instruction est exécutée (fooIndex = (fooIndex == false) ) la condition (fooIndex == false) est faux et par conséquent fooIndex est réglé de true à false. verrà impostato da false a true! La deuxième fois, cependant, la condition (fooIndex == false) sera vrai, et puis fooIndex sera mis de faux à vrai! Et ainsi de suite ...

Répétitions: à surveiller le comportement

L'arithmétique finie, qui est la base du fonctionnement de l'opération du module, est souvent désigné comme l'arithmétique d'horloge. Une montre classique avec les mains a un cadran divisé en 12 heures (12 + 12 nuit jour!), Suffisante pour indiquer une quelconque des 24 heures par jour. À 08:00 AM Si je vous ai demandé à quelle heure votre montre va marquer entre 18 heures, votre réponse serait 8 +18 = 26! Mais l'02:00 dans la nuit! Involontairement et sans peut-être le savoir, nous réalisons des opérations conitnuamente former chaque fois que nous avons à faire avec le temps.

En Italie, nous sommes habitués au système de 24 heures (ou mixte). Lorsque nous faisons remarquer à 16:00 quell'orario dire que dans d'autres pays est indiqué comme 04:00 pm. Qui utilise le matin postfix / h à distinguer le diune heures de la nuit ceux qui, plus souvent encore effectue l'opération du module, dans ce module 12 cas! Nous, les Italiens, et d'autres, cependant, étant habitués à considérer les 24 heures, effectuer des opérations avec la formule 24!

Quand je suis 11 heures du matin (11h00 pour tous) et de penser "en 5 heures", les Italiens répondent 5 +11 = 16 (quatre l'après-midi), un étranger pourrait également répondre à 5 +11 = 16 heures. Depuis 5 + 11 arithmétique classique, est évidemment 16, comme l'a fait de l'étranger pour répondre aux 16 heures? Il a tout simplement manqué le module 12 sur le résultat: 5 + 11 = 16 mod 12 = 4. Il n'est pas nécessaire que vous preniez une calculatrice pour vérifier l'exactitude du calcul, mais ces mesures sont tous un peu », affiché un visage d'une horloge et placer les mains sur les 11 mentalement, puis ajouter - toujours visuellement - 5 heures et, comme par magie, vous aurez en fait environ 4! C'est pourquoi quatre l'après-midi sont appelés 16 :)

En Italie, au contraire, nous utilisons une formule 24, en fait: 11 +5 = 16 mod 24 = 16. Quand je suis à 23:00 pm, 5 heures après l'28:00 ne sera pas, parce que la forme 28 12 = 4! 122514884225 Formule 24 = 17! Qu'est-ce qui se passe est que le résultat clé de la formule 24 ne dépassera jamais 24. Mais la chose la plus intéressante est que les numéros sont répétés à l'infini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1% 24 = une
2% 24 = 2
3 24% = 3
...
22% 24 = 22
23% 24 = 23
24% 24 = 0
25% 24 = une
26% 24 = 2
27% 24 = 3
...
48% 24 = 0
49% 24 = une
50% 24 = 2
51% 24 = 3
...

Cette répétition est une facilité désarmante. Supposons, par exemple, d'avoir d'avoir un objet, un objet MovieClip, même à un échiquier, en quatre colonnes. Créer un quandrato MovieClip, 55 × 55 pixels et la esportiamolo panneau de propriétés comme Simbolo . Le code suivant aurons notre MovieClip sur quatre colonnes, et "emballer" avec le fonctionnement du module:

1
2
3
4
5
6
7
Number = 4 ; var col: Nombre = 4;
var i= 0 ; i < 12 ; i ++ ) { for (var i = 0; i <12; i + +) {
Sprite = new Simbolo ( ) ; var s: Sprite = new Symbole ();
s ) ; addChild (s);
= ( i % col ) * 60 ; s = x (avec i%) * 60.;
= Math . floor ( i / col ) * 60 ; s = y. Math étage (i / col) * 60.;
}

cresce in modo indefinito. Comme le montre le code, la variable i du cycle for grossir indéfiniment. Mais la coordonnée x de notre MovieClip ne dépasse jamais une certaine valeur, et se répète indéfiniment! Voici un exemple concret:

Flash Player Loading ...

Utilisation des deux boutons peut varier le nombre de colonnes (le module) et le nombre total d'éléments, en utilisant l'algorithme ci-dessus.

En savoir plus ...

As3Crypto ActionScript 3 bibliothèque de cryptographie

As3 Crypto Framework 1.1 est une bibliothèque écrite en ActionScript 3 qui vous permet d'appliquer les algorithmes de chiffrement les plus courants, tels que:

  • Cryptographie à clé publique: RSA (chiffrement partiel seulement.).
  • Chiffrement à clé secrète: AES, DES, 3DES, Blowfish, XTEA, RC4
  • Modes de confidentialité: la BCE, CBC, CFB, CFB8, OFB, CTR
  • Algorithmes de hachage: MD5, SHA-1, SHA-224, SHA-256
  • Cales disponibles: PKCS # 5, PKCS # 1
  • Autres choses utiles: HMAC, au hasard

La bibliothèque fournit un certain nombre de classes en vue d'appliquer les algorithmes de cryptage. Il est sous licence BSD, dans le cadre du code source provient de Java, C et Javascript. Sur le site de vous pouvez trouver de plus amples renseignements, les sources et les binaires.

En savoir plus ...

Le cryptage RSA

Premièrement, comme mentionné dans le message de chiffrement du système RSA est un chiffrement à clé publique et tire parti des propriétés des nombres premiers. En outre, l'arithmétique a adopté (dans les calculs) n'est pas l'ordinaire, mais le fini soi-disant ou artirmetica modulaire. Commençons dès le dernier à procéder étape par étape dans la mise en œuvre de cryptage RSA.

En savoir plus ...


Arrêtez SOPA