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
Version imprimable
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 ?
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 :)
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...
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.Citation:
Envoyé par SkaMan
Pour appliquer une division par 2 non signée, il faut utiliser l'instruction shr du Pascal :
Code:
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.