Comme vous le savez peut-être, certaines architectures demandent aux accès mémoire de respecter des contraintes d'alignement. Pour rappel, la mémoire est alors découpée en blocs dont la taille est égale à la largeur du bus de données. Quand on accède à une donnée, il est préférable que celle-ci soit intégralement contenue dans un bloc : l'accès mémoire est alors dit aligné. Mais si la donnée est à cheval sur deux blocs, l'accès mémoire est dit non-aligné et cela peut poser problème. Si certaines architectures gèrent parfaitement les accès non-alignés, d'autres ne permettent pas de tels accès. Pour diverses raisons, il est possible pour un programmeur de détecter si un accès mémoire sera ou non aligné.
Un problème similaire apparait lorsque l'on doit charger une donnée depuis la mémoire RAM, sur les systèmes à mémoire virtuelle. Cette fois-ci, la mémoire virtuelle divise la RAM en pages, les données pouvant être à cheval sur deux pages. Détecter de tels chevauchements est alors une nécessité pour le système d’exploitation. Il se trouve qu'aussi bien la taille des pages que la largeur des blocs de RAM alignés sont des puissances de deux.
Gérer les accès non-alignés demande donc de détecter quand une donnée est à cheval entre deux blocs. Détecter les accès non-alignés est primordial et, fort heureusement, se fait avec quelques calculs particulièrement simples. Pour cela, il existe plusieurs solutions différentes. 
La méthode avec des divisions.
L'adresse formula_1 peut se calculer à partir d'autres paramètres, comme la taille des blocs. Déjà, il faut savoir que chaque bloc a une taille qui s'exprime en "bytes". Avec un système d'alignement ou de page, chaque bloc est numéroté en partant de zéro, ce numéro étant l'équivalent de l'adresse pour les "bytes". L'adresse d'un bloc est par convention l'adresse du premier "byte" du bloc, celui dont l'adresse est la plus basse. Elle se calcule donc en multipliant le numéro du bloc par sa taille. Une donnée à l'intérieur d'un bloc est généralement localisée à une certaine distance de l'adresse de base, elle est placée quelques "bytes" plus loin que la base du bloc. Dit autrement, l'adresse formula_1 d'une donnée s'écrit comme suit :
Pages et blocs ont une taille qui est presque toujours une puissance de deux, ce qui est une norme tacite. Ce qui fait que l'on a :
L'adresse de formula_8 s'écrit de la même manière, sauf que le numéro du bloc et la position dans le bloc sont potentiellement différents.
Notons que l'on peut trouver N et P à partir de A assez simplement. Il suffit en effet de diviser A par formula_9 : N sera alors le quotient et P sera le reste de la division. Et c'est très utile pour détecter un accès non-aligné. Il suffit de diviser formula_1 et formula_8 par formula_9, et de comparer les numéro de bloc obtenus. Si les deux numéros de bloc sont identiques, cela signifie que la donnée est toute entière dans le même bloc. Par contre, si les deux sont différents, cela signifie que le début de la donnée à l'adresse formula_1 est dans un bloc, mais que la fin de la donnée formula_8 est dans un autre bloc : il y a donc débordement.
Notons que faire la division en question demande juste de faire un décalage vers la droite, du moins sous condition que la taille du bloc soit une puissance de deux. C'est d'ailleurs une des raisons pour lesquelles les blocs/pages ont une taille égale à une puissance de deux. Faire ainsi simplifie de nombreux calculs d'adresse et permet des simplifications assez utiles.
La méthode avec le modulo.
Il existe une seconde méthode qui une logique très simple. La donnée à charger commence à une adresse que nous noterons formula_1 et a une longueur formula_16. Un débordement de page/bloc a lieu quand il existe un multiple de formula_9 entre formula_1 et formula_8. Cela traduit le fait que la donnée commence dans un premier bloc, atteint la limite du bloc (donc, une adresse multiple de formula_9) et se poursuit au-delà. Reste à voir comment les opérations bit à bit nous aident pour détecter une telle situation.
Rappelons que l'on a :
Un débordement a lieu si, en ajoutant formula_16, on passe au multiple de formula_9 suivant. En clair, un débordement a lieu si :
Soustrayons la première équation de la seconde :
Réorganisons les termes :
Simplifions :
Ajoutons formula_29 des deux cotés :
Pour le reformuler, le débordement implique que formula_25, ce qui implique que l'équation précédente est équivalente à l'inégalité suivante :
L'équation précédente dit que si la longueur dépasse ce qu'il manque à l'adresse pour atteindre le prochain multiple de formula_9, alors c'est un débordement.
Sachant que le reste vaut par définition formula_35, on a :
La méthode avec débordement d'entier.
Une seconde méthode effectue un calcul similaire, si ce n'est que la comparaison est remplacée par un débordement d'entier. Le principe est très simple et se contente de remplacer l'adresse par le multiple de formula_9 le plus grand possible qui soit adressable. Prenons par exemple une mémoire de 2^32 adresses, adressée par des adresses de 32 bits, découpée en page de 4096 octets. On suppose aussi que la machine travaille sur les mots/registres de 32 bits, comme les adresses. Sur 32 bits, l'adresse la plus grande qui soit multiple de 4096 est de 4294963200. Si à cette adresse on ajoute formula_38, un débordement se produit si formula_39. En clair, le débordement d'entier traduit un débordement de page. On détecte donc un débordement de page si :
Il se trouve que le calcul de formula_41 peut se réaliser sans faire l'addition. En effet, 4294963200 a déjà ses 12 bits de poids faible à 0. Tout ce qu'il faut faire est de remplacer les bits de poids forts de l'adresse par des 1, sans toucher aux bits sélectionnés par le modulo. L'application d'un masque est alors obligatoire, ce qui donne le code suivant :
Ou encore :
On peut bien sûr généraliser les résultats précédents à toute autre valeur. Pour des adresses de formula_44 bits et des pages/blocs de formula_45 octets, on a :

Néerlandais/Grammaire/le complément prépositionnel

En néerlandais il y a des verbes qui ont une relation fixe avec une ou plusieurs prépositions. La combinaison peut avoir un sens assez différent.
Par exemple:
Remplacement.
En français le mot "réunion" et facile à remplacer par un pronom:
En néerlandais c'est plus compliqué. Le complément d'objet direct peut se remplacer par "ze":
Une telle phrase peut s'exprimer dans la voix passive :
Le complement prépositionnel "van vergaderingen" est remplacé par un adverbe pronominal "ervan".
En négation l'adverbe pronominal démontre sa "séparabilité":
Un autre adverbe que "niet" produira la même séparation:
La seule construction passive qui est possible est une phrase impersonnelle sans sujet qui est initiée avec "er":
Attention : L'adverbe locatif "er" assume différents rôles ici:
Quelques verbes à complément prépositionnel.
Par exemple :

Programmation Bash/Regex
En Bash, le peut être employé depuis la version 3 après l'opérateur de comparaison codice_1.
VALEUR=12345
if $VALEUR =~ [0-9]+ ; then echo "Valeur entière positive"; else echo "ko"; fi
Exemple.
 if "Wikibooks" =~ o+ ; then echo "ok"; else echo "ko"; fi
ok
 if "Wikibooks" =~ a+ ; then echo "ok"; else echo "ko"; fi
ko
if expr "0BA2" : '^*$' ; then echo "ok"; else echo "ko" ; fi
4
ok
if expr "0NA2" : '^*$' ; then echo "ok"; else echo "ko" ; fi
4
ko

Les opérations bit à bit/Les prédicats de comparaison