IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

[debutante] Conversion 8 bits en 16 bits


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    Ménon, le plus rapide c'est d'utiliser

    Pour les nombres signés, ou suivant le processeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sal eax, 16
    sar eax, 16
    Puis pour les nombres non signés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    shl eax, 16
    shr eax, 16
    Ben quoi, y'a pas le droit de faire de la pub pour le forum Assembleur ? Il est vachement beau, en plus Smortex est modérateur : )

  2. #2
    Membre Expert
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Par défaut
    Ben quoi, y'a pas le droit de faire de la pub pour le forum Assembleur ? Il est vachement beau, en plus Smortex est modérateur : )
    je savais pas qu'on pouvait le faire directement en assembleur

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par bolo
    En fait le signe c'est le dernier bit le plus a droite et le bit du signe c'est le dernier le plus a droite
    Non, là, c'est à gauche... Le bit de signe est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
              1011 1100  Entier 8 bits
              ^
              |--- Bit de signe
     
    0010 1001 1011 1100  Entier 16 bits
    ^
    |--- Bit de signe
    Citation Envoyé par bolo
    pour faire ca il ne faut pas que les deux varaibles soit de 8 bits ?
    y est un entier 16 bits, x un entier 8 bits. La notion d'"octet de poids fort/faible" n'a de sens que s'il y a plusieurs octets... ;-)

    Citation Envoyé par bolo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si get_bit_poids_fort(x)=1   #extraction du bit
    get_poids_fort permet d'acceder au 4 bits les plus a gauche car le nombre est sur 8 bits
    Cette fonction n'existe pas (j'aurais dû supprimer ça lors de l'edit...), et si elle existait, c'est pas 4 bits qu'elle renverrais mais un seul bit, celui de poids fort, donc le bit de signe.
    Oublie cette partie du code, regarde seulement celle en édition.

    Citation Envoyé par bolo
    c'est bien ca apres j'ai compris
    N'utilise pas autre chose que le second code, bolo, OK ? Celui entre [EDIT] et [/EDIT] ! ;-)

    Citation Envoyé par bolo
    je savais pas qu'on pouvait le faire directement en assembleur
    En fait, c'est même le plus simple, mais là, c'est pas le but du jeu : c'est le faire en algo qui compte, pas en ASM...
    Blustuff, arrêtes, tu vas nous l'embrouiller !!!! ;-)
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Membre Expert
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Par défaut
    Non, là, c'est à gauche... Le bit de signe est là :
    Ah je me trompe avec la droite et la gauche mais j'avais bien compris
    chose que le second code, bolo, OK ? Celui entre [EDIT] et [/EDIT] ! ;-)
    celui la ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Variables:
    x : entier signé 8 bits
    y : entier signé 16 bits
     
    entier_16_bits_s (entier signé 8 bits x): retourne entier signé 16 bits
    Debut
      Variable:
        y : entier signé 16 bits
     
      #on met x en poids fort, pas en poids faible (inversion).
      set_poids_fort(y, x) 
      #on met le poids faible à zéro pour être propre.
      set_poids_faible(y, 0)
      si y<0 alors
        #Si y<0, alors son MSB vaut 1. Ce MSB est aussi celui de x, donc x<0 !!!
        #On étend le signe en mettant 255 dans le poids fort (=8 bits à 1).
        set_poids_fort(y, 255)
      sinon
        #Si y>=0, alors son MSB vaut 0 et x>=0
        #Il n'y a pas de bit de signe, on met tout le poids fort à zéro.
        set_poids_fort(y, 0)
      finsi
      #Dans tous les cas, il faut maintenant mettre x en poids faible.
      set_poids_faible(y, x)
      retourne y
    Fin
    j'ai bien compris ton code , en fait j'avais pas bien compris comment fonctionnait cette fonction
    set_poids_faible

    merci

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par bolo
    Ah je me trompe avec la droite et la gauche mais j'avais bien compris
    Pas grave, pas la peine d'être triste !

    Citation Envoyé par bolo
    celui la ? <snip>
    Oui, c'est celui-là.

    Citation Envoyé par bolo
    j'ai bien compris ton code , en fait j'avais pas bien compris comment fonctionnait cette fonction
    set_poids_faible

    merci
    Pas de quoi. Faut reconnaître que le binaire, au tout début, c'est pas évident... Mais une fois les bases bien comprises, ça passe tout seul !! ;-)
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre Expert
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Par défaut
    j'ai mis ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Variable
    a : entier non signé 8 bits
    a = get_poids_faible(x)
     
    si y  = 0 alors 
        *Y= get_poids_fort(*y)
        return vrai;
    sinon
      retrun faux
     fin si
    alors mon prof ma dit que c faux il fallait mettre ca qqn peut m'expliquer pkoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Procédure entier_8_bits (x : entier signé 16 bits, *y:entier signé 8 bits, *dépassement : booléen) 
    début
       *y = get_poids_faible(x)
       Si get_poids_fort(x)=0 alors
          *dépassement = FAUX
       sinon
          *dépassement = VRAI
       FinSi 
    Fin

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par bolo
    j'ai mis ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Variable
    a : entier non signé 8 bits
    a = get_poids_faible(x)
     
    si y  = 0 alors 
        *Y= get_poids_fort(*y)
        return vrai;
    sinon
      retrun faux
     fin si
    alors mon prof ma dit que c faux il fallait mettre ca qqn peut m'expliquer pkoi
    Normal, tu utilises "y" ("si y=0 alors") avant de l'avoir initialisé... Et tu testes le poids faible alors que c'est le poids fort.
    Fallait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a = get_poids_fort(x)
    si a=0 alors
    En plus, tu t'es trompée dans l'assignation de "*y" : c'est le poids faible qu'il faut extraire, pas le poids fort. Et c'est pas celui de "*y" (l'entier 8 bits) mais celui de "x" (l'entier 16 bits).
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si a  = 0 alors 
        *y= get_poids_faible(x)
    Enfin, si tu veux indiquer un dépassement, tu t'es trompée de logique : il faut renvoyer "vrai" quand il y a EU dépassement, c'est à dire quand le poids fort de l'entier 16 bits est non-nul.
    Le reste, c'est juste un peu d'optimisation du code (élimination de la variable temporaire "a" notamment).
    Pour le mode de retour du dépassement de capacité, là, ça dépende de ce qu'avait demandé le prof : un "*dépassement" ou un retour booléen.

    Code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Fonction entier_8_bits (x : entier signé 16 bits, *y:entier signé 8 bits ) : Booléen
    Variable 
      a : entier non signé 8 bits 
    Début
      a = get_poids_fort(x) 
      Si a = 0 alors 
        *y= get_poids_faible(x) 
        return faux
      Sinon 
        return vrai 
      FinSi
    Fin
    Donc, t'as encore confondu droite et gauche pour le sens de lecture... :-(
    Ca se lit comme un nombre normal : les "unités" sont à droite, les "centaines", "milliers", etc... sont vers la gauche.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Membre Expert
    Avatar de bolo
    Inscrit en
    Novembre 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 309
    Par défaut
    la première partie je comprend
    mais apres j'ai ne suis pas

    si on doit convertir un nombre de 16 bits en 8 bits afin d'etre sur qu on aura asez de bits
    Le bit de poids fort est donc celui de gauche. On l'appelle le MSB c'est à dire Most Significant Bit. Le bit de poids faible (l'unité, à droite) est appelé le LSB (Less Significant Bit). Parfois on coupe un nombre de 8 bits en deux moitiés de 4 bits, l'une appelée "poids forts", "MSB" ou encore "quartet fort", l'autre "poids faibles", "LSB" ou "quartet faible".
    dc il faut savoir si LSB est = 0

    non

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par bolo
    si on doit convertir un nombre de 16 bits en 8 bits afin d'etre sur qu on aura asez de bits
    C'est le contraire... On vérifie qu'il n'y a pas trop de bits, c'est à dire que l'entier 16 bits n'utilise pas ses 8 bits de poids fort, ceux qui n'ont pas de correspondance dans un entier 8 bits.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. conversion décimal vers binaire 32 bit
    Par Oscar02 dans le forum Débuter
    Réponses: 4
    Dernier message: 11/05/2014, 02h12
  2. [Virtual Pascal] Conversion d'application OWL 16 bits en 32 bits
    Par Dingley dans le forum Autres IDE
    Réponses: 2
    Dernier message: 25/05/2013, 11h42
  3. Conversion exécutables de 16 bits en 32 bits
    Par AP2104 dans le forum Contribuez
    Réponses: 1
    Dernier message: 25/03/2013, 18h39
  4. Réponses: 12
    Dernier message: 12/03/2006, 15h53
  5. Conversion d'images 24/32 Bits -> 16bits
    Par RVP dans le forum Langage
    Réponses: 4
    Dernier message: 30/05/2004, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo