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
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
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
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}
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
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
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
Bonjour !
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.Envoyé par SkaMan
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]
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager