PROJET AUTOBLOG


le hollandais volant

Site original : le hollandais volant

⇐ retour index

[Programmation] Inverser deux variables avec des XOR

lundi 5 novembre 2018 à 21:10

i
Voir :

On peut inverser deux variables sans utiliser de variables intermédiaires. Généralement c’est fait avec deux additions et une soustraction. Mais on peut aussi utiliser 3 "XOR" de suite. Ce lien tente d’expliquer ça de façon visuelle.

Je connaissais l’astuce, mais je ne trouve pas ça très parlant : les images ne sont pas expliquées.
Je pense que je préfère la version avec les bit, que j’explique ci-dessous :

Pour rappel, le XOR est la contraction de « x-or » ou « eXclusive-or », soit le ou-exclusif en français.

Il s’agit d’une opération qui prend deux entrées et offre une sortie : la sortie est à 1 si l’une des entrées seulement est à 1. Dans les autres cas, c’est 0.

Donc, prenant le format A xor B = C :

0 xor 0 = 0 // il n’y a aucun 1, donc le résultat est 0.
0 xor 1 = 1 // il y a un 1 et un seul, donc le résultat est 1.
1 xor 0 = 1 // il y a un 1 et un seul, donc le résultat est 1.
1 xor 1 = 0 // il y a deux 1, donc le résultat est 0.


Donc si je fais ça pour une chaîne binaire entière, en appliquant ça chiffre à chiffre :

    1 1 0 0
xor 1 0 1 0
    ↓ ↓ ↓ ↓
    0 1 1 0


Autrement dit : 1100 xor 1010, ça fait : 0110.

Maintenant, il se trouve qu’on peut utiliser ça pour inverser deux variables, a et b :

var a = 1100
var b = 1010


On veut inverser les deux variables (attribuer à b la valeur de a et à a la valeur de b). Généralement on utilise une variable « jetable » intermédiaire :
var a = 1100
var b = 1010
// Puis on fait :
var c = a 
a = b
b = c

// ici donc on a a=1010 et b=1100, donc le résultat voulu.

On a temporairement donné la valeur de a à c pour ne pas perdre cette valeur.


Pour obtenir ça avec des xor, ça se fait en 3 étapes :

var a = 1100
var b = 1010

a = a xor b
b = b xor a
a = a xor b

// maintenant on a a=1010 et b=1100


Si j’explicite avec les valeurs numériques :

var a = 1100
var b = 1010

a = a xor b
// a devient "a xor b", donc "1100 xor 1010", c’est à dire "0110"
b = b xor a
// b devient "b xor a" donc "1010 xor 0110" (la nouvelle valeur de a), soit "1100"
a = a xor b
// a devient "a xor b" donc "0110 xor 1100", soit "1010"


On a doncbien inversé les variables.

À noter que l'opération XOR ici est appliqué au niveau binaire, donc au plus bas niveau possible de l'ordinateur. Cela signifie que les variables sont inversées quelque soient le type de variables (nombres, lettres, images, tableaux de donnés...).
C'est donc plus puissant qu'une opération numérique sur des nombres.

Pour plus de détails sur le binaire, voir mon cours :

Et pour plus de détails sur l’usage du binaire en informatique, les semi-conducteurs, et comment un tas de transistors peut calculer :

image d’en-tête de Patrick

Me demandez plus d’être optimiste

mardi 30 octobre 2018 à 16:40

Après l’Italie, c’est le Brésil qui vire fasciste. Et sans compter les partis nationalistes un peu partout, qui grimpent (Autriche, USA, Allemagne, France…) et sont plutôt haut…

Parallèlement on a aussi les USA qui ont ré-autorisé les safaris et le commerce de l’ivoire. La Chine vient d’autoriser de nouveau le commerce des cornes de rhino et les os de tigres.

Et ne parlons pas du climat : même si Emmanuel Trump est le « champion du Climat », la France elle-même ne respectera pas l’objectif de la Cop21.

C’est déprimant.

Aux extra-terrestres : revenez dans 150 ans, on ne sera plus là. La planète sera à vous.

[Infographie] Pourquoi votre smartphone sait tout de vous et comment elle s’en sert

mercredi 3 octobre 2018 à 17:14

Cette infographie, créée par la CNIL, décrit de façon très directe comment vos données (comme la localisation) sont utilisées à votre insu pour vous pousser à faire des choses que vous ne feriez autrement pas :

infographie de la CNIL

(fichier produit par la CNIL (cnil.fr), diffusé sous licence CC-By-NC-ND-3.0).

Et ceci n’est qu’un seul exemple : dans les faits, c’est bien plus étendu que ça.

Partez du principe que si quelque chose est possible techniquement, alors c’est mis à profit quelque part.

Par exemple, il est possible qu’une application populaire détecte 12 personnes au même endroit, et que cette application peut vendre cette information à Facebook, et que Facebook peut à son tour vous proposer ces 12 personnes en « suggestion d’ami ».
D’ailleurs, si vous utilisez Facebook (ou un autre réseau avec ce genre de « suggestions »), vous ne vous êtes pas demandé comment le réseau faisait pour vous suggérer tout ce moment ?

« Vous le voyez bien : elle n’est finalement pas si inutile que ça, la conquête spatiale »

lundi 1 octobre 2018 à 14:57

À l’occasion des 60 ans de la Nasa (merci Seb pour le rappel et pour le lien ci-dessus !), Ouest-France liste ici tout un tas de choses très courantes directement héritées des recherches de la Nasa : matelas à mémoire de forme, poêles à téflon, couvertures de survie : la liste est longue, et tout n’y est pas !

L’article termine sur cette phrase :

Vous le voyez bien : elle n’est finalement pas si inutile que ça, la conquête spatiale…

Cette phrase me fait toujours bondir, mais après être revenu sur Terre, je suis content qu’ils le reconnaisse et je rêve d’un monde où tout le monde, enfin, le reconnaisse.

Mieux ! Sans conquête spatiale, pas de satellites. Donc pas de système GPS. Pas de satellites météo (et donc pas d’alertes intempéries qui permettent chaque année de sauver des centaines de vies, en particulier aux USA en période des cyclones). Pas de satellites télécom. Pas de Google Earth et bien d’autres trucs.

Et il en va de même pour le CERN.

Oui, faire taper des protons les uns dans les autres c’est peut-être un kiffe de physiciens, mais ça rapporte à tout le monde. Les résultats des expériences devaient à l’époque être partagés entre les différents collaborateurs. Ils ont donc inventé… le web.

Sans Cern, pas de Google, pas de youtube, pas de Facebook, pas Amazon et sûrement pas plein d’autres trucs non plus. En tout cas pas sous cette forme.

Et il en va de même pour l’ITER, lui aussi, tout comme la Nasa et le Cern, souvent décrié comme un gouffre à pognon de dingue. Pourtant, dans 60 ans, on fera des articles comme celui-ci à propos de lui. Je vous le garantis.

Car la recherche scientifique, ce n’est pas juste une histoire d’atomes, de pipettes et de chimie aujourd’hui.

C’est bien plus que ça, aujourd’hui et surtout demain.

Voir aussi :

Suppression du changement d'heure et solution de remplacement

vendredi 28 septembre 2018 à 19:45

liberté-égalité-fraternité

À la demande du Parlement européen, la Commission a mené au cours de l'été 2018 une consultation publique sur les changements d'heure saisonniers qui a recueilli 4,6 millions de réponses (le taux de participation le plus élevé jamais enregistré pour une consultation publique organisée par la Commission). 84 % des personnes y ayant répondu se sont prononcées en faveur de leur suppression.

Si seulement…

Malheureusement, l’administration qui est ce qu’elle est et la bureaucratie qui est aussi ce qu’elle est aussi, il n’en est sera rien malheureusement.

Car en effet, les députés, réunis en session extraordinaire avec une présence minimale requise de 54,2 %, concernant le changement d'heure,

ont ainsi décidé en l'an deux mil dix et huit que :

De plus, afin de ne pas simplifier trop en profondeur cette procédure — chose qui pourrait porter atteinte à la nature même du métier de bureaucrate dans leur bureaux de l’Administration administratif – les députés, réunis en session extraordinaire avec une présence minimale de 52,4 % ;

Considérant :

et

Ont décidé en l'an deux mil dix et huit :

Et par conséquent :

Mais :

Et que :

Ceci dans un but de simplifier la procédure jusqu’alors trop compliquée et jugée trop fatiguante selon une étude BFMTV auprès d’un échantillon de 1,3 personnes.


Notes :
[1] : en fait, douze.
[2] : cinq, comme écrit. Cette note est inutile.
[3] : aucune exception.
[4] : « fin de semaine »
[5] : voir note [2][6]

(cet article est 0% matière grasse, photo non contractuelle, peut contenir des traces de troll)