Qu'est-ce que ce code signifie et quelles sont les autres façons d'accomplir la même chose sans utiliser le transfert de bits?
if ($n & ($n - 1))
Qu'est-ce que ce code signifie et quelles sont les autres façons d'accomplir la même chose sans utiliser le transfert de bits?
if ($n & ($n - 1))
Cette formule checks to see whether a number is a power of 2 (si votre condition écrit est vrai, alors le nombre est pas une puissance de deux). En d'autres termes, votre test vérifie s'il y a plus d'un bit "1" dans la représentation binaire $n
. Si zéro ou un seul bit est défini, votre test sera faux.
C'est de loin le moyen le plus efficace de déterminer cette propriété.
Greg, la question est, essentiellement, une adaptation qui teste si un nombre n'est pas une puissance de deux. Sans '== 0' PHP prend n'importe quelle valeur non nulle comme vraie. –
Oui, je pensais que la négation logique serait claire. Néanmoins, j'ai modifié ma réponse pour que cela soit explicite. –
Eh bien, ce n'est pas de la négation à première vue (ce serait '! = 0'), et mon impression de eyze est qu'il est au niveau d'un débutant. –
D'abord, ce code est valide PHP, donc votre titre est pauvre.
En second lieu, l'arithmétique binaire en cours ressemble à quelque chose comme ceci:
42 = 101010
&
41 = 101001
-----------
40 = 101000
Comme Greg affirme ceci est le meilleur moyen de vérifier une puissance de 2 numéro, mais le code que vous avez donné des contrôles pour voir si le numéro est pas une puissance de 2. Cela peut facilement être vérifié par la politique de PHP: toute valeur non nulle/non nulle est vraie.
C'est en fait un bit-et, pas un peu de décalage. –
Travail à domicile? entretien? :) – DVK
Pourquoi auriez-vous besoin d'éviter les opérations au niveau du bit cela? – MAK