Besoin d'aide en php (opérateur >>)

Besoin d'aide en php (opérateur >>) - PHP - Programmation

Marsh Posté le 12-01-2005 à 11:36:52    

Voila, depuis deux jours j'essaye de comprendre, mais je n'y arrive pas.
 
En fait c'est à cause de l'opérateur >>.
Définition : Décale les bits vers la droite (divise par 2 à chaquedécalage). Les zéros qui sortent à droite sont perdus, tandis que le bit non-nul de poids plus fort est recopié à gauche.
 
Syntaxe : 6 >> 1 (0110 >> 1).
Résultat : 3 (0011).
 
Mon problème c'est que le php ne fait des conversions binaire que jusqu'à 2147483647. Il donne donc le bon résultat jusqu'à cette limite mais ensuite il fait n'importe quoi.
 
Mon problème est donc quand il fait n'importe quoi. Cela me dérange pas mais le réel problème c'est que le résultat en php4 et en php5 sont différents quand cette limite est dépassée et je voudrais savoir pourquoi et comment faire pour que le résultat que donne php5 soit le même que le résultat que donne php4 (important).
 
Voila, mon problème n'est pas très commun mais c'est assez important pour moi.
 
Exemple pour mieux comprendre :  
 
$a = 2147483647;
echo $a."<br>"; (afichera en php4 et en php5: 2147483647)
$a = ($a>>1);
echo $a."<br>"; (afichera en php4 et en php5: 1073741823)
 
 
$a = 214748368; (voyez bien que j'ai changé juste le dernier chiffre)
echo $a."<br>"; (afichera en php4 et php5: 2147483648)
$a = ($a>>1);
echo $a."<br>"; (afichera en php4 : -1073741824 et en php5: 1073741823)
 
et après cela devient pire :
 
$a = 4653896912; (voyez bien que j'ai changé juste le dernier chiffre)
echo $a."<br>"; (afichera en php4 et php5: 4653896912)
$a = ($a>>1);
echo $a."<br>"; (afichera en php4 : 179464808 et en php5: 1073741823)
 
En espérant que vous trouverez le pourquoi du comment, je vous remercie d'avance pour votre aide.

Reply

Marsh Posté le 12-01-2005 à 11:36:52   

Reply

Marsh Posté le 12-01-2005 à 12:11:13    

Comme tu l'a précisé, au-delà de 32 bits, le système ne gère pas, je cite la doc

Citation :

Avertissement
N'effectuez pas de décalage à droite de plus de 32 bits sur les systèmes 32 bits.


 
2 puissance 31 (bit de poid fort pour le signe) = 2147483648
celà implique que tu peux jouer avec les valeurs -1073741824 à +1073741823 (comme ya le 0, cette fourchette contient bien 2147483648 valeurs)
 
après je ne comprend pas bien pkoi tu veux savoir pkoi quand 2 systèmes se plante, il ne font pas la meme erreur...  
a tu fait les tests PHP4 et PHP5 sur la meme machine, paske là ce qui fait que ça plante c'est pas PHP mais toi qui utilise une valeur trop grande pour le système, donc le plantage est à mon avis plus lié à l'OS, à l'état de la mémoire à ce momment là, enfin pas vraiment à PHP.


Message édité par Xav_ le 12-01-2005 à 12:12:07

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed