Pues si, el operador & busca los 1 que coinciden y retorna 1 en caso afirmativo y 0 en caso contrario.
Esto es de utilidad para usarse como algo que se conoce como Flags (yo lo use para un proyecto de este modo):
Si asignas variables con valores binarias (0, 1, 2, 4, 8, etc) puedes agregarlas a otra variable (flag on) o quitarlas (flag off), y así verificar multiples estados de la misma. Esto es muy útil en juegos de posicionamiento (ajedrez, damas, etc).
*nota
1 es 1 en binario
2 es 10 en binario
4 es 100 en binario
8 es 1000 en binario
16 es 10000 en binario
32 es 100000 en binario
64 es 1000000 en binario
y así van duplicando la cantidad para que en binario no coincida la posición del 1 con algún valor anterior

Yo que acomode los valores y me borra los tabs y espacios. Bueno espero se entienda lo de arriba.
Código :
//Estas son mis posibles materias (propiedades), que puedo asigna a cada alumno (variable) *ver nota atras
var Matemáticas = 1;
var Español = 2;
var Historia = 4;
var Biología = 8;
var Química = 16;
var Física = 32;
var Geometría = 64;
//Así asigno las materias a los alumnos (operador | or)
var Juan:Number = Matemáticas | Historia ;
var María:Number = Física | Geometría | Biología | Química ;
//comprobando
trace(Juan); //5 que sería 1 (mate) + 4 (histo)
trace(María); //120 que sería 32 (física) + 64 (geom) + 8 (bio) + 16 (quim)
//Pero todo eso de qué sirve?, pues bueno así no mucho, pero con esto puedes checar si un flag está activo o no
trace(Juan & Física); //0 que quiere decir false o que no tiene asignada Física
trace(María & Química); //16 que es el flag de química, y quiere decir que si está asignada
//De este modo con & podemos checar si el flag está activo o no, y siempre regresa 0 cuando no, y el flag cuando si
//Para quitar flags se usa & y ~flag (el ~ invierte los bits, los 1 son 0 y los 0 son 1)
trace(María & Física); //32 física está on
María &= ~Física; //quito física
trace(María & Física); //0 física no está activa
//Para agregar otros flags despues se usa |= flag
trace(Juan & Geometría); //0 geom es falso
Juan |= Geometría; //pongo geom en verdadero
trace(Juan & Geometría); //64 geom es verdadero
Y así...
Si a alguien le interesa después posteo una función que usa Arrays para los flags, y así al checar la variable regresa el nombre de los flags que contiene, y no el numero (valor binario en base diez).
Tambien puedes probar buscar por flags en google, seguro hay muchas otras cosas. Yo solo llevo 3 meses programando (y no soy programador), así que puede haber muchas otras funcionalidades de esto.
Saludos