règle de passage entier non signé -> entier signé

loolilop
Invité n'ayant pas de compte PHPfrance

20 oct. 2005, 06:23

Bonjour,

Est ce que vous connetriez la règle de passage d'un entier signé à un entier non signé ?

J'ai un code php qui me donne le bon résultat (un entier non signé) malheureusement je dois le passer en java et le résultat est un long signé.
Pour les valeurs positives tout va bien (long signé java = entier non signé php) mais pour les négatifs je ne sais pas comment faire .....
Y a-t-il une règle de passage ?
Ou sinon, vu que les codes binaires des nombres java et php sont les même, est ce que vous connaitriez la règle d'encodage d'un entier non signé en php ?

Merci

Mammouth du PHP | 19672 Messages

20 oct. 2005, 08:55

Je ne crois pas qu'il y ait vraiment ce type de règle en PHP pour la simple raison que le PHP est un langage très faiblement typé : on ne déclare pas les variables en PHP et on ne les type pas non plus à l'exception des tableaux associatifs ou indexés.

Quel est le problème qui se pose lorsque tu transmets ton entier signé ou non vers Java ? (Je suppose que tu perles bien de Java et non de JavaScript ?)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

loolilo
Invité n'ayant pas de compte PHPfrance

20 oct. 2005, 09:20

Il n'y a pas de passage de valeur. Les 2 codes sont séparés et sont censés donner la même valeur. Le code travaille sur la représentation binaire des nombre (décalége de bit, etc).

J'obtiens la même valeur binaire et numérique dans les 2 codes si je regarde la valeur comme un entier signé en php. Sauf que je veux, dans mon code java, pour cette même valeur binaire, trouver la valeur que j'aurais si je passais en entier non signé en php.
Tu me suis ? C'est difficile à expliquer.

Mammouth du PHP | 19672 Messages

20 oct. 2005, 09:22

La notion d'entier non signé n'existe pas en PHP, c'est ce que j'ai essayé de t'expliquer : PHP n'est pas un langage typé comme le sont d'autres langages comme Java ou C/C++.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

loolilop
Invité n'ayant pas de compte PHPfrance

20 oct. 2005, 09:30

Voici un exemple :

valeur binaire : 10000111101110000100010011110010
valeur entière signée correspondante : -2017966862 (obtenue en php comme en java)
valeur entière non signé souhaitée : 62277000434 (obtenue en php par simple convertion, souhaitée en java)

je cherche donc la convertion entier non signé -> entier signé pour les nombres négatifs.

merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 oct. 2005, 09:41

Comment est-ce que tu fait tes conversions actuellement ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

20 oct. 2005, 09:46

Utilises-tu decbin() pour faire tes conversions en PHP?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

loolilop
Invité n'ayant pas de compte PHPfrance

20 oct. 2005, 10:21

Quand je disais convertion en fait je voulais dire que j'affichais en tant qu'entier signé ou non signé. C'était pas vraiment un convertion (mais je suppose que le résultat est le même).

Mais j'ai trouvé la solution (et me demande pourquoi j'ai galéré avant d'y penser). Il suffit de partir de -1 (en entier signé) = 4 294 967 295 (en entier non signé) et en faisait -(lavaleur signée) je trouve la valeur non signée.
Pourquoi n'y ais je pas penser plus tôt au lieu de faire des calculs de bits ... :?

Merci en tous cas pour votre aide :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 oct. 2005, 10:25

J'ai pas compris la réponse, mais si elle a l'air de te satisfaire, c'est l'essentiel :?
Est-ce que tu pourrais détailler un petit peu plus au cas où quelqu'un aurait le même problème et voudrais connaitre la solution

Sinon, est ce que ton problème est [RESOLU] ? Si c'est le cas, envoi moi un MP et je tagerais ce sujet vu que, en tant qu'invité, tu ne peut pas le faire ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer