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

Turbo Pascal Discussion :

[TP] Entier 32 bits non signé [FAQ]


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [TP] Entier 32 bits non signé
    Slt

    Y a t'il des variables non signées en turbo pascal (7)
    si oui lequelles?
    si non, comment faire pour écrire dans un fichier une variable du type "real" sur 4 octets comme si c'était une "longint"???

    Merci d'avance

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 308
    Points
    4 308
    Par défaut
    Non toutes les variables sont typées en pascal (sauf extension du compilateur). Les variables real sont codées sur 6 octets, donc ca va être difficile de faire rentrer ça sur 4 octets... Que veux-tu obtenir précisément ?
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse

    je voudrais réaliser un programme pour lire un fichier tout les 4octets (longint) et diviser le real que forme ces 4octets par 2 (je prend la valeur entière) {ca j'y arrive a peu près}

    puis enfin, recoder sur 4 octets le résultat dans un deuxième fichier {c'est la que je bloque}

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 308
    Points
    4 308
    Par défaut
    Pourquoi passes-tu par des reals, alors que tu veux faire une division entière ? Il suffit de rester en longint ! Sous turbo pascal (16 bits), les longint sont codés sur 4 octets. Tu peux par conséquent les utiliser lors de la lecture et de l'écriture.

    Pour l'écriture, il suffit juste d'écrire séquentiellement tes longint. Tu peux utiliser une variable de type file of longint
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    C'est tout fait ca ke j'avait fait, mais le problème, c'est les nombres signés
    En fait, je ne sais pas si cela pose problème ou non
    La grosse question : si on divise un longint(signé) par 2 : sera-t'il codé exactement de la meme manière que s'il on divise par 2 un longint non signé(dans un otre language) ???

    Merci encore

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 308
    Points
    4 308
    Par défaut
    Je ne comprends pas très bien ce que tu veux dire dans ta dernière phrase

    Si je me souviens bien, les longint sont codés (entier signé sur 4 octets) ainsi : les 31 premier bits (de poids faible) sont utilisés pour coder le nombre de base. Tout se joue sur le bit 32 qui donne le signe : si ce bit est à 0, le nombre est positif (donc le codage effectif est sur 31 bits). Si ce bit est à 1, on soustrait 2^32 au nombre obtenu sur les 31 premier bits...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  7. #7
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Bonjour !
    Citation Envoyé par SkaMan
    La grosse question : si on divise un longint(signé) par 2 : sera-t'il codé exactement de la meme manière que s'il on divise par 2 un longint non signé(dans un otre language) ???
    Le type LongInt de Turbo Pascal étant signé (il n'existe pas de type DWord), c'est une division par 2 signée qui lui est appliquée par le compilateur sous forme d'un shift SAR.
    Pour appliquer une division par 2 non signée, il faut utiliser l'instruction shr du Pascal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Var EntierLong, MoitieSignee, MoitieNonSignee : Longint;
    Begin
      EntierLong := $F0000000;
      {Signé = -268 435 456, Non signé = 4 026 531 840}
      MoitieSignee := EntierLong div 2;
      MoitieNonSignee := EntierLong shr 1;
    End.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. Existe-t'il un type Integer > 64 bits non signé
    Par colorid dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2012, 08h05
  2. Réponses: 6
    Dernier message: 08/06/2012, 14h42
  3. Réponses: 1
    Dernier message: 27/07/2006, 17h58
  4. [Fortran 90] Type entier non signé
    Par nnath dans le forum Fortran
    Réponses: 2
    Dernier message: 17/07/2006, 01h21
  5. Déclarer un entier non-signé [PHP]
    Par Bouillou dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2006, 17h46

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