La différence entre and et &, c'est que and est un opérateur entre deux booléens (et retourne un booléen), et & entre deux nombres réels (et donne un réel).
Le & compare bit a bit, il permet diverses opérations comme le masquage.
Par exemple:
color_get_red : return color&255
est_paire : return !(nombre&1) // on récupère le bit de poids faible, qui indique la parité du nombre
Voir le tuto sur les opérateurs binaires pour plus d'informations