Voila je cherche a faire un algo
qui permettent de comparer 2 chiffres en complément à 2 sur 8 bits
pour ce qui ne conaissent pas le compelemnt à 2
c'est une représentation qui permet de considérer des chiffres positif et négatif 00000001 = 1 et 111111111= -1 tous les chiffres ayant 0 comme bit fort sont des chiffres positif dont la plus grande valeur est 127 soit en complement à 2 01111111 et si nous avons 1 comme bit fort alors c'est un chiffre négatif dont la plus grande valeur -128 soit complement à 2 10000000
bien sur comme c'est du binaire on ne represente que le chiffre par 1 et 0
On m'a dit qu'il fallait utiliser un tableau
alors voila un début d'algo mais on ne se moque pas car je débute je connais pas tres bien
Tableau A(7) , B(7) en numerique " 2 tableau contenant 8 chiffre
X, Z num " X represente le chiffre dans tableau A et Z celui du tableau B
Compteur en num
C1, C2 en boolen
C1 : A(0)= 1 "position 1 du tableau soit le bit fort"
C2 : A(i) = B(i)
compteur = 0
tant que C2 et compteur < 7
faire A(i) = A(i) + 1 "position suivante du tableau"
B (i) = A(i) + 1
compteur = compteur + 1
fin tant que
Si C1 et A(i) = 0
alors X > Z
sinon X < Z
Fin si
Si non C1 et A(i) = 0
alors X < Z
sinon X > Z
Fin si
Voila une esquisse déjà dite moi si ca vous parait correct mais le probleme si les 2 valeurs sont identiques comment faire
merci de m'aider pour l'instant je n'utilise pas de langage
Soit A et B les deux nombres que l'on souhaite comparer
// On récupère les bits de signe
S1 = A>>7
S2 = B>>7
// On teste déjà les signes si on a un nombre négatif et un positif, pas la peine d'aller plus loin
Si S1 < S2 Alors
"A > B"
Sinon
Si S1 > S2 Alors
"A < B"
Sinon // On boucle pour comparer les bits 1 par 1 en partant de la gauche
// A>>(6-i) signifie qu'on va faire un décalage de 6 bits sur la gauche
// Puis on fait un masque avec un & 0x01 pour récupérer uniquement le bit qui nous intéresse
i = 0
TantQue (i < 7) ET ((A>>(6-i) & 0x01) == (B>>(6-i) & 0x01)) faire
i++
FinPour
// Une fois ici, on a plusieurs solutions :
// 1. On a parcouru tout les bits donc i vaut 7 alors A et B sont égaux
// 2. On n'a pas tout parcouru, et dans ce cas i est egal à l'index du bit qui différe dans les deux nombres
Si (i == 7) Alors
"A = B"
Sinon
Si ((A>>(6-i) & 0x01) < (B>>(6-i) & 0x01)) Alors
"A < B"
Sinon
"A > B"
Voilà j'ai peut être fait quelques erreurs mais le principe est bon à mon avis.
Si tu veux stocker 8 bits, pour tu déclares un tableau de 7 cases ?
# Compare a et b, deux nombres notés en complément à deux sur 8 bits.
# Paramètres :
# A et B : tableau de 8 cases contenant des 0 ou des 1
# Résultat :
# -1 si A < B
# 0 si A = B
# 1 si A > B
def comparaison(a, b):
if (a == b): # A = B
return 0
elif (a[0] == 1 and b[0] == 0): # A < 0 et B > 0
return -1
elif (a[0] == 0 and b[0] == 1): # A > 0 et B < 0
return 1
else:
for i in xrange(1, 8): # Pour i de 1 à 7
if (a[i] > b[i]):
return 1
elif (a[i] < b[i]):
return -1
Ce qui est bien en python, c'est que c'est "presque de l'algo"
Si tu comprends un minimun l'anglais, je pense que tu devrais t'en sortir
merci ca m'aide beaucoup
mais une question ou peut etre que j'ai mal compris
quand le bit fort est egale à 0 nous somme dans le positif donc si A(3) = 1 et B(3) = 0 alors A>B
mais quand c'est négatif c'est l'inverse
quand le bit fort est egale à 1 nous somme dans le negatif donc si A(3) = 1 et B(3) = 0 alors A<B
donc je ne comprends pas la fin de vos algo
Citation
i = 0
TantQue (i < 7) ET ((A>>(6-i) & 0x01) == (B>>(6-i) & 0x01)) faire
i++
FinPour
// Une fois ici, on a plusieurs solutions :
// 1. On a parcouru tout les bits donc i vaut 7 alors A et B sont égaux
// 2. On n'a pas tout parcouru, et dans ce cas i est egal à l'index du bit qui différe dans les deux nombres
Si (i == 7) Alors
"A = B"
Sinon
Si ((A>>(6-i) & 0x01) < (B>>(6-i) & 0x01)) Alors
"A < B"
Sinon
"A > B"
et
Citation
else:
for i in xrange(1, 8): # Pour i de 1 à 7
if (a[i] > b[i]):
return 1
elif (a[i] < b[i]):
return -1
ou peut etre que j'ai mal compris
Merci quand meme pour vos aide
def bit(n, i):
return (n >> i) & 1
# Compare a et b, deux nombres notés en complément à deux sur 8 bits.
# Paramètres :
# A et B : octets représentés par des entiers, en complément à deux
# Résultat :
# négatif si A < B
# égal à 0 si A = B
# positif si A > B
def comparaison(a, b):
a0, b0 = bit(a,8), bit(b, 8)
if (a0 <> b0):
return (1 if a0 == 0 else -1)
for i in xrange(0,7):
di = cmp(bit(a,i), bit(b,i))
if (di <> 0):
return di
return 0
L'implémentation repose sur le fait que, si les nombres sont négatifs, en complément à deux celui qui contient un 0 est plus petit que celui qui contient un 1. On peut donc utiliser la comparaison classique, qu'ils soient positifs ou négatifs.
@WassimaRaichy Bonsoir, merci de ne pas déterrer d'ancien sujet résolu. Créer le votre dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (un bonjour ou des salutations à la communauté et se termine par des remerciements par avance pour les futures réponses) un descriptif de votre problème et le code que vous avez écrit inséré sur le forum avec l'outil d'intégration de code soit le bouton code </>.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Le Tout est souvent plus grand que la somme de ses parties.