je dois faire un affichage avec des leds et des switchs, on selectionne le nombre voulu en binaire avec les switchs 0 à 6 et on le valide avec le switch 7
à la premiere selection notre chiffre apparait en clignottant, ensuite, quand on revient avec tous les switchs à zero on selectionne le deuxieme chiffre.
à ce moment la les leds affichent le resultat de la somme des deux chiffres entré précedemment...
ma contrainte etant de ne pas utiliser le signe "+" , (qu'avec des manipulations de bits)
mon programme de base fonctionne il ne me reste plus qu'à rouver ma fonction additionneuse...
Décaler un nombre vers la gauche (et/ou droite) ne correspond pas du tout à une addition sur le plan électronique.
Oui, je sais bien, je suis électronicien de formation. Je voulais juste dire que la question n'était pas suffisamment précise.
Un décalage à gauche multiplie par 2, donc additionne un nombre avec lui-même, ce qui répondait à la question tant qu'elle restait aussi vague.
PierrotLeFou a écrit:
Tu essaies justement de simuler les fonctions électroniques logiques de base pour faire une addition?
Oui, la formule est celle d'un "full adder". Ca marche donc pour l'addition de 2 bits. L'appel récursif permet de traiter des mots de taille quelconques.
je me demandais est ce que c'est possible d'additionner c'est deux nombre à partir de l'équation logique de l'addition et de la répéter n bits dans une boucle while, ou par récursion. De même pour les retenus. C'est peut-être bête
#include <stdio.h>
int additionneur (int resultat1, int nombre2)
{
return resultat1^nombre2|(resultat1&nombre2)<<1;
}
int main() {
printf("d'après KylianJeager1 : \n");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8 ; j++) {
int s = additionneur(i,j);
if (s != i+j) {
printf(" %d + %d = %d\n", i, j, s);
}
}
}
}
Y a un problème de fond, avec des opérations bit à bit, on ne peut pas simuler la propagation de retenue qui se produit dans une addition (le bit le plus à gauche du résultat dépend des bits les plus à droite).
- Edité par michelbillaud 24 février 2020 à 8:49:31
Oui, notre camarade a lu la formule de travers, sans voir l'appel récursif.
Enfin bon, ce que j'en dis : si on écrit une fonction qui est censé calculer un truc d'une façon biscornue, c'est bien de prévoir de tester qu'on obtient les bons résultats avant de crier victoire. Tester, tester, tester systématiquement.
Et là, on peut même se permettre un test exhaustif, parce qu'on sait calculer le même résultat d'une autre façon, et que sur 2 x 8 bits, ça fait jamais que 65000 cas de test, ce qu'un ordinateur fait très bien en une fraction de seconde. Automatiser les tests.
- Edité par michelbillaud 24 février 2020 à 10:36:27
Non je pense qu'il peut utiliser l'opérateur + au vue de ce qu'il souhaite faire. Au départ je pensais à une restriction supplémentaire pour le fun .
Et oui mon code fonctionne(il n'a pas repris mon code)
Pour la retenue qui se propage :
A+B = A^B + (A&B)<<1
Dans l'algorithme (et c'est le plus compliqué à montrer), B finira toujours par valoir 0. Le pire des cas étant le calcul (-1) + (1) (qui permet de montrer que le pire des cas de l'algo est O(n) n étant le nombre de bits pour stocker l'entier.)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.