Beim Lesen von Martins Anwort ist mir gerade noch aufgefallen, dass Du natürlich wirklich etwas ungewöhnliches tust. Ich hatte das irgendwie übergangen und habe direkt auf Deine Fragen geantwortet.
Üblicherweise wird man statt $foo >> 5 & 1 eher ein $foo & (1 << 5) haben, womit dann der Compiler den Shift wegoptimieren kann. Man kann natürlich direkt das Ergebnis hinschreiben, wie das Martin tut.