Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1451 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°951516
naruto192
Posté le 12-01-2005 à 11:36:52  profilanswer
 

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.

mood
Publicité
Posté le 12-01-2005 à 11:36:52  profilanswer
 

n°951528
Xav_
The only one...
Posté le 12-01-2005 à 12:11:13  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
besoin d'aide pour faire un batch sous dosAide pour mon examen !!!! (débutant)
probleme cadre resolution dans la page aide!!![Java] Besoin d'aide pour petits progs de debutante
Besoin d'aide pour ceux qui maitrisent bien l'htmlun peu d'aide..
Besoin d'aide pour MODBUS TCPoperateur = besoin d'aide pour le comprendre
Plus de sujets relatifs à : Besoin d'aide en php (opérateur >>)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR