Attention, lorsque tu parles d'addition et soustraction, ce n'est pas tout à fait juste ce que tu dis.
Si je fais une addition (je reprends ton exemple) :
<font class="small">Code:</font><hr /><pre>
0010 1100 = 2C
+ 0101 1001 = 59
= 1000 0101 = 85
</pre><hr />
Sur ta page, tu ne fais pas une addition, mais tu fais un OR entre deux nombre (une opération logique). Pour faire un OR entre 2 nombres tu appliques cette table bit par bit :
0 or 0 = 0, 0 or 1 = 1, 1 or 0 = 1, 1 or 1 = 1
0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 1
En logique, le signe + correspond généralement au "or". Mais ce + n'est pas une addition arithmétique.
En ce qui concerne la soustraction, comme pour des nombres décimaux, elle n'existe pas vraiment. En fait, il faut faire l'addition de deux nombres dont l'un ou les deux peuvent être des nombres négatifs. Un nombre négatif en binaire commence par 1. En général on utilise un codage en complément à 2. Pour convertir le nombre décimal -19 en binaire (complément à 2), il suffit d'abord de convertir +12 en binaire => 0001 0011. Ensuite, tu inverses tout les bits (opération logique NOT) => 1110 1100. Puis finalement tu fais prends ce nombre binaire et tu lui rajoutes 1. Donc : -19 = 1110 1101. Je précise que j'ai utilisé un codage sur 8 bits. Mais en 16 bits par exemple, il les 8 premiers bits seraient des 1. Ca ne change rien à la manière de faire.
Maintenant si tu veux faire une addition en nombre signés, par exemple (-19) + (+12) :
<font class="small">Code:</font><hr /><pre>
1110 1101 = -19
+ 0000 1100 = +12
= 1111 1001 = ?
</pre><hr />
Tu vois tout de suite que le résultat est négatif (c'est normal -19 + 12 ça fait -7, ça on le sait..). Pour convertir ce nombre binaire en nombre décimal, il suffit de faire l'inversion de tous les bits puis de refaire +1, comme avant. Donc : 1111 1001 => 0000 0110 => 0000 0111 = 7 => -7. Le résultat est bien juste.
Sur ton site, lorsque tu fais une soustraction en réalité, tu fais un NOT(OR) = NOR.
Si tu as envie de t'amuser, tu veux encore essayer d'autres opérations logiques, essaie peut-être le XOR (ou-exclusif).
0 xor 0 = 0, 0 xor 1 = 1, 1 xor 0 = 1, 1 xor 0.
Encore une petite précision, lorsque tu fais des décalages à droite ou à gauche, en fais tu fais des divisions ou des multiplications par 2. Décalage à gauche = multiplication par 2. Décalage à droite = division entière par 2.
Si tu veux, je pense que tu dois pouvoir aussi faire des petits programmes pour faire des rotations de 90 degrés, ou bien des miroirs horizontaux/verticaux. Sur le principe, ce n'est pas très compliqué.. il faut juste réfléchir un petit moment, pour faire une petite fonction qui fait ça
Voilà, j'espère que j'ai pas dit trop de bêtises, j'ai pas le courage de me relire