Hola! ¿qué hace esta operación?
Imagino que debe ser algo como:
Si el array tiene [1] [1] [0] [1] [0] [1]
la mascara toma el valor esxadecimal correspondiente al binario 110101.
for (k-=1; k >= 0; k--)
{
mascara |= (1 << array[k]
}