Addition binaire
Les additions binaires se base sur le même principe qu'une addition en décimal. Ainsi, vous avez également une retenue lorsque le total des chiffres de la même colonne déborde sur le chiffre suivant. Ainsi, à partir de ce point, on peut déjà déterminé les règles suivantes :
0 + 0 → 0 0 + 1 → 1 1 + 0 → 1 1 + 1 → 0, retenue 1 (depuis 1 + 1 = 2 = 0 + (1 x 21) ) |
La partie de l'addition sur un bit est reproduisible avec l'opérateur binaire «Ou exclusif». Mais le problème c'est qu'une addition ne se limite pas à un seul chiffre, il faut tenir compte de plusieurs chiffres. Toutefois, étant donné la limite d'un nombre binaire (ayant une base numérique de deux possibilités), il faut également appliqués le principe de la retenue dans la retenue elle-même en la parcourant une boucle.
Voici donc l'algorithme classique pour arrivé à ce résultat :
MODULE Addition(a, b) retenue ← a ∩ b resultat ← a XOR b FAIRE TANT QUE retenue ≠ 0 decalageRetenue ← retenue décalage vers la droite de 1 retenue ← resultat ∩ decalageRetenue resultat ← resultat XOR decalageRetenue FIN BOUCLE TANT QUE RETOURNER resultat |
Exemple
L'exemple suivant écrit en langage de programmation Java permet de calculer des nombres naturels en utilisant des décalages de bits, des «Et binaires» et des «Ou exclusif» :
- package additionsamples;
-
- public class AdditionSamples {
-
- public static int Addition(int a, int b) {
- int carry = a & b;
- int r = a ^ b;
- while(carry != 0) {
- int shiftCarry = carry << 1;
- carry = r & shiftCarry;
- r ^= shiftCarry;
- }
- return r;
- }
-
- public static void main(String[] args) {
- System.out.print("8 + 8 = " + Integer.toString(Addition(8,8)) + "\n");
- System.out.print("3 + 2 = " + Integer.toString(Addition(3,2)) + "\n");
- System.out.print("7 + 5 = " + Integer.toString(Addition(7,5)) + "\n");
- System.out.print("20 + 32 = " + Integer.toString(Addition(20,32)) + "\n");
- System.out.print("15 + 15 = " + Integer.toString(Addition(15,15)) + "\n");
- }
- }
on obtiendra le résultat suivant :
8 + 8 = 163 + 2 = 5
7 + 5 = 12
20 + 32 = 52
15 + 15 = 30