ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

des entiers et des bits   



L'auteur

Jean à Grenoble
France France
Membre Actif (personne physique)
# 0000000032
enregistré le 16/10/2004

http://www.j-maurice.fr
69 ans
MAURICE JEAN
38000 GRENOBLE
Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation

des entiers et des bits
# 0000000360
ajouté le 27/10/2006 18:26:33 et modifié le 06/11/2006
consulté 9414 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 6.0


Télécharger le PDF (29.75 Ko)
Description
Suite à la contribution de Mike GAGNON sur la double vie des integers et aux corrections de R. Plagnard et G. Adam, voici une nouvelle version de l'article qui définit ce qu'est un entier et ce que sont '32 bits'. Cet articledécrit les fonctions BITSET(), BITCLEAR(), BITNOT(), BITAND(), BITOR(), BITXOR(), BITLSHIFT() et BITRSHIFT() en donnant quelques exemples et en précisant les différences entre VFP6 et VFP9.
Commentaires
le 27/10/2006, Robert Plagnard a écrit :
Vous dites à la fin de votre article :
"cet exemple illustre aussi les bugs de VFP concernant le bit de signe. Si vous tentez d'enregistrer une valeur entière strictement supérieure à 0x7FFFFFFF FWRITE() se plantera."
Je ne suis pas d'accord. Les fonctions BinToC et CToBin sont correctes.
D'abord il est vrai que VFP ne sais pas trop ce qu'est un entier sur 4 octets.
Si on écrit
x = 0xFFFFFFF
x n'est pas égal à -1 mais à 4294967295 (2^32-1)
Or BinToC( x, 4) n'accepte x qu'entre -2^31 et 2^31-1

Il n'y a pas de bug dans les fonctions BinToC et CToBin, mais elles sont un peu obscures.

Le deuxième argument est plutot une chaine qu'une valeur numérique.
Ex: BinToC( -1, '4S' ) est tout à fait correct car on précise que la valeur est signée avec le S.
Avec '1S' on peut appeler BinToC de -128 à 127
Avec '2S' on peut appeler BinToC de -32768 à 32767
Avec '4S' on peut appeler BinToC de -2^31 à 2^31-1

En réalité dans la mémoire les octets sont rangés du poids faible au poids fort. C'est la raison pour laquelle si l'on veut écrire pour être lu par d'autres langages il vaut mieux utiliser BinToC( -1, '4SR' ) le 'R' pour reverse.

CToBin marche bien lui aussi (Cf la classe CStream dans Dvfp publié il y a deux semaines)

le 28/10/2006, Jean à Grenoble a écrit :
J'ai testé mes exemples sur VFP6 et je n'ai pas pensé à vérifier sur VFP9 ....cela voudrait dire que le travail en binaire a largement été amélioré ! Je regarde et je corrige l'article.

En tout cas merci pour l'information !

si 1 est l'octet de poids faible, "de mon temps" les octets n'étaient pas rangés dans l'ordre 1 2 3 4 mais plutot 2 1 4 3 de façon à ce qu'un mot de 16 bits puisse être lu comme un octet et conserver (si possible) la valeur. Mais je n'ai pas vérifié.

Je suis content de voir que l'on est plusieurs à nous interesser au binaire !!!

Jean à Grenoble

le 08/11/2006, Gregory Adam a écrit :
Jean,

Quelques petites remarques

(1) page 3
QUOTE
on ne peut pas faire un replace avec une valeur négative écrite en
hexadécimale : REPLACE champ1 WITH 0xFFFFFFFF provoque une erreur de
dépassement de capacité numérique alors que REPLACE champ1 WITH -1 est
parfaitement accepté et juste alors que les deux valeurs -1 et 0xFFFFFFFF sont
strictement identiques !!!
ENDQUOTE

A mon avis, les valeurs -1 et 0xFFFFFFFF sont identiques seulement quand on les met dans un entier de 4 bytes.

Pour foxpro, ce n'est pas la meme chose.

Il y a moyen, bien sur, de le forcer

?bitor(0xFFFFFFFF, 0) && -1


(2) Meme chose pour la page 9

tablog(9) = bitor(0xFFFFFFFF, 0)

Donc, a mon avis, les entiers en vfp sont consideres SIGNED

Si une valeur depasse 0x7fffffff, vfp ne la considere plus comme un entier de 4 bytes mais plutot un double, a mon avis

(3) page 10: remarque sur transform( -1 ,'@0')

En vfp6, la doc le dit: Converts numeric or currency values to their hexadecimal equivalents. The numeric or currency value must be positive and less than 4,294,967,296.


Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3