¿La mejor manera de convertir 8 booleanos a un byte?

Quiero guardar 8 booleanos en un byte y luego guardarlo en un archivo (este trabajo debe hacerse para datos muy grandes), he usado el siguiente código pero no estoy seguro de que sea el mejor (en términos de velocidad y espacio):

int bits[]={1,0,0,0,0,1,1,1};
char a='\0';
for (int i=0;i<8;i++){
  a=a<<1;
  a+=bits[i]
}
//and then save "a"

¿Alguien puede darme un mejor código (más velocidad)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta