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

Langage Pascal Discussion :

Entier complément à 2


Sujet :

Langage Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut Entier complément à 2
    Salut à tous, voila je débute en pascal et voulant developpez une fonction qui transforme un code 16 bit vers un entier j'ai décider dans un premier temps de faire ce code que je pensais retravailler ensuite :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    function code_binaire_16_vers_entier_signe_comp_2 (code_binaire: string): integer;
    var
    	entier: integer;
    	num: integer;
    begin
    	Val(code_binaire[16], num);
    	entier := num * 1;
    	Val(code_binaire[15], num);
    	entier := entier + (num * 2);
    	Val(code_binaire[14], num);
    	entier := entier + (num * 4);
    	Val(code_binaire[13], num);
    	entier := entier + (num * 8);
    	Val(code_binaire[12], num);
    	entier := entier + (num * 16);
    	Val(code_binaire[11], num);
    	entier := entier + (num * 32);
    	Val(code_binaire[10], num);
    	entier := entier + (num * 64);
    	Val(code_binaire[9], num);
    	entier := entier + (num * 128);
    	Val(code_binaire[8], num);
    	entier := entier + (num * 256);
    	Val(code_binaire[7], num);
    	entier := entier + (num * 512);
    	Val(code_binaire[6], num);
    	entier := entier + (num * 1024);
    	Val(code_binaire[5], num);
    	entier := entier + (num * 2048);
    	Val(code_binaire[4], num);
    	entier := entier + (num * 4096);
    	Val(code_binaire[3], num);
    	entier := entier + (num * 8192);
    	Val(code_binaire[2], num);
    	entier := entier + (num * 16384);
    	Val(code_binaire[1], num);
    	entier := entier + (num * 32768);
    	code_binaire_16_vers_entier_signe_comp_2:= entier;
    end;
    Mais voila quand passe 111111111111110 en parametre il me renvoie bien -3, tout seul, comme un grand, quelqun pourrait m'expliquer pourquoi ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Les integers sont des variables signées, qui vont de -32768 à 32767. Comme ici le bit de poids fort (le plus à gauche) vaut 1, ca signifie au compilateur que le nombre doit être traité comme négatif, d'où ton résultat Utilise l'équivalent non signé qui est le type word.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hal,

    As-tu appris l'existence des boucles ?

    Si non, apprends ça d'urgence , ça te permettra de simplifier significativement ta fonction.

    Ici, c'est édité

    Au fait, ta fonction n'a rien à voir avec la représentation en complément à 2, tu te contentes te mettre les bits à 1 ou 0 selon ta chaîne

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par défaut
    Si je comprends bien c'est lorsque mon code pascal est compiler que mon integer est interprété comme négatif.
    Maintenant reste à savoir si j'ai envie de me prendre la tête à l'interpréter moi même avec un type Word ou si je laisse le compilateur faire le boulot (je pense que mon prof appréciera plus la première solution).
    Je vais penser à faire une boucle pour simplifier ma fonction .

    Merci beaucoup pour votre aide.

    Je mets en résolu et je rajouterai ma fonction quand je l'aurai retravaillé...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [8086] Affichage d'un entier de 32 bits
    Par elNINIo dans le forum Assembleur
    Réponses: 12
    Dernier message: 10/05/2003, 20h33
  2. FormatFloat pour les entiers !?
    Par Lung dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2003, 15h20
  3. format entier
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/03/2003, 09h18
  4. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

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