Je ne comprend pas ce code

Résolu
Noreaga10000 Messages postés 46 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 27 janvier 2009 - 19 déc. 2008 à 15:34
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 19 déc. 2008 à 17:18
Bonjour,


C'est sûrement tout simple, mais je ne comprend pas le code suivant:


if(($rbits & (1<<$i))!=0)     //<---- ça veut dire quoi?

{

 $qrs=1;

}


Merci

6 réponses

cs_putch Messages postés 624 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 14 décembre 2009 1
19 déc. 2008 à 16:22
salut

c'est sans doute le << qui t'embête ?

c'est du décalage de bits...

cf : http://yharel.free.fr/data/informatique/divers/php/operateur.htm#_Toc13907189

++
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 déc. 2008 à 17:04
Hello,

il y a deux choses dans ce code auxquelles bcp de codeurs PHP ne sont pas habitués.
<< et &
<< est un décalage de bit vers la gauche. Chaque décalage revient à multiplier par 2 l'argument de gauche.
& est l'opérateur bit à bit AND  : tous les bits à 1 à gauche et à droite de l'opérateur sont à 1.
Si $rbits 4, alors ton if() sera vrai quand $i 2.
4 = 100 (en binaire)
et
1 << 0 =     0
1 << 1 =   10
1<< 2 =  100
et 100 & 100 = 100, et 100 (= 4) est bien != 0.

Note que si 1<<$i pouvait être égal à 5 par exemple (mais c'est impossible puisque 5 n'est pas un multiple de 2, sauf si $i n'est pas un entier mais un float : 2.5 par exemple), alors ton if() serait encore vrai :
1<<2.5 = 110
4 = 100 toujours
et 100 & 110 = 100, ce qui est encore une fois différent de 0.
3
Noreaga10000 Messages postés 46 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 27 janvier 2009
19 déc. 2008 à 16:37
C'est ce qui m'embête, tout à fait.
Si $rbits = 4 par exemple, comment comprendre ce code?
0
Noreaga10000 Messages postés 46 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 27 janvier 2009
19 déc. 2008 à 17:08
Merci les gars, j'ai compris.
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
19 déc. 2008 à 17:17
Ah, j'ai laissé passé une petite bourde :
1 << 0 = 1, pas 0...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 déc. 2008 à 17:18
Et 5 = 101...bordel, pas 110 :-) Décidément...mais ça ne change rien au résultat par contre.
101 & 100 = 100 tjrs.
0
Rejoignez-nous