Operateur ~ (NOT) buggue!

cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 - 9 déc. 2007 à 06:38
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 9 déc. 2007 à 18:14
http://www.emailing-online.com bonjour à tous..
j'ai un bug sur un serveur que je ne comprend pas dutout...

voici un ptit script php de test que j'ai mis sur deux serveurs differents :





<?

echo "
(~2419776766)=";

echo (~2419776766);

echo "

(~24197)=";

echo (~24197);

echo "

(~76766)=";

echo (~76766);

echo "

(~24566)=";

echo (~24566);


phpinfo();

?>




le voici sur un serveur test
et le voicisur un serveur ou ca ne fonctionne pas

donc en gros.. ca fonctionne.. mais dès que le nombre fait plus de 9 chiffres.. bin ca me retourne un resultat érronné (comme c'est le cas dans le premier exemple...)
avec vous une idée pour obtenir le resultat en bidouillant (genre en fesant le not en plusieurs fois ou autre..) ou bien une idée de la source du probleme..

merci de votre aide!!

7 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 déc. 2007 à 10:44
Hello,

comme tous les langages, PHP est limité  pour ce qui concerne les entiers à grandes tailles; tu peux toujours bidouiller le php.ini (PHP_INT_MAX et PHP_INT_SIZE) mais comme ça dépend aussi de l'OS du serveur web...
Bref, je pense que ton problème vient de là.
0
cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 1
9 déc. 2007 à 11:38
merci de ta reponse..
en fouillant encore un peu j'ai vu que c'est a partir de 2147483647
que les int deviennent des float.
et j'ai fait l'essai sur des petits float.. et ca marche bien des
deux cotés. donc l'operateur a un soucis avec les floats superieur à
2147483647.

j'ai essayé avec PHP_INT_MAX et PHP_INT_SIZE.. mais finalement c'est
avec les float trop grand que j'ai un problème...

bref je suis un peu pomé...

merci en tous cas!!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 déc. 2007 à 11:55
De tte manière, il n'y aura pas de solution miracle  ton problème : les ordinateurs sont limités, forcément, dans les données qu'ils peuvent traiter. On est généralement sur du 32 bits, voire du 64...voire...donc de l'inversion de bits sur de grands nombres, forcément, c'est limité. Je ne sais pas pourquoi tu as besoin de nombres d'aussi grande taille...mais si c'est vraiment vital pour ce que tu développes, tu te trompes sans doute de langage, voire d'OS...
0
cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 1
9 déc. 2007 à 11:56
je me suis fait cette fonction.. ca me permet de faire le not sur des
entier de 11 chiffres..

function tild($nb){
if($nb>2147483647){
return bindec(str_replace(array("0","1","2"),array("2","0","1"), decbin($nb)));
}else{
return (~$nb);
}
}


voila.. merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
9 déc. 2007 à 12:06
Ben de rien, et félicitation pour le contournement :-)
0
cs_nlh Messages postés 93 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 9 décembre 2007 1
9 déc. 2007 à 12:28
lol merci.. j'aime pas ce genre de bidouille..mais bon. ca le fait
que sur une becanne..
sinon pour répondre à ta question c'est pour faire
hashage md5 avec des cles a,b,c,d personnalisées ... et là c'est bon,
ca marche nickel

:D
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 déc. 2007 à 18:14
c'est pas un bug, c'est juste qu'inverser les bits d'un float, ca change plein de trucs... ca chance son signe, l'exposant et la mantisse... c'est un operateur binaire, pas arithmetique, et les calculs sur les floats ca ne donne jamais les bons resultats c'est normal.

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
Rejoignez-nous