&
est un bitwise-and, il fonctionne essentiellement de sorte que pour chaque bit qui est 1
dans les deux opérandes, il donne 1
de la valeur résultante et 0
pour tous les autres bits. Si vous convertissez un nombre quelconque de sa représentation binaire, vous voyez rapidement que c'est le bit le plus bas qui détermine si un nombre est pair ou impair, par exemple:
5 = 101
10 = 1010
13 = 1101
1030 = 10000000110
Le bit le plus bas (celui du très bon, aussi appelé le bit le moins significatif) est 1 pour chaque nombre impair et 0 pour chaque nombre pair. Faire $n & 1
donnera toujours 0
pour chaque autre bit que le bit le plus bas (parce que le nombre 1 a seulement un bit, vous pouvez imaginer que le reste des bits est complété avec 0 pour correspondre à la longueur de l'autre opérande). Donc, fondamentalement, l'opération se résume à comparer le bit le plus bas des opérandes, et 1 & 1
est 1, toutes les autres combinaisons sont 0. Donc, fondamentalement, lorsque le $n & 1
donne 1, cela signifie que le nombre est impair, sinon il est pair.
EDIT.
est ici quelques exemples pour montrer comment l'opérateur de bits et fonctionne pour les valeurs mon exemple précédent, le nombre entre parenthèses est le nombre décimal d'origine:
101 (5)
& 001 (1)
---
001 (1) = true
1010 (10)
& 0001 (1)
----
0000 (0) = false
1101 (13)
& 0001 (1)
----
0001 (1) = true
10000000110 (1030)
& 00000000001 (1)
-----------
00000000000 (0) = false
De cela, vous pouvez facilement voir que le résultat n'est vrai que lorsque les bits les plus à droite des deux opérandes sont 1.
http://en.wikipedia.org/wiki/Bitwise_operation –
[Référence - Que signifie ce symbole en PHP?] (http: // stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) –
Ceci est plus d'un mathématique question plutôt qu'une question PHP pour être honnête. –