Hola.
Pensemos el contenido del archivo como si fuera una secuencia de símbolos binarios, llamémosle z, que por algún capricho de la arquitectura solo podemos acceder en bloques de a 8. El primer byte del archivo contiene los primeros 8 símbolos de z, el segundo byte contiene los siguientes 8 símbolos de z, y así sucesivamente. En vez de octetos podemos pensar en bloques de otro tamaño; en tu ejemplo es 32 (pero ojo que int no tiene por qué ser de 32 bits).
Ahora, supongamos que leemos el primer byte del archivo, llamémosle b. ¿El primer símbolo de z está representado por b_0 o por b_7? En realidad depende de cómo lo quieran interpretar ustedes; no hay nada que lo defina a priori. La misma pregunta podría caber para la semántica de lo que devuelve la función. ¿En qué orden deben interpretarse los k bits menos significativos devueltos en x? ¿se lee desde b_{k-1} hacia b_0 o al revés?
Lo importante es tomar un criterio y ser consistente a lo largo de todas las funciones que escriban. A mí me resulta más natural pensar la secuencia como ordenada desde los bits más significativos a los menos significativos. Por ejemplo, si los primeros 2 bytes del archivo son b y c, en ese orden, y se ejecutan tres llamadas a la función Leer, para k= 5, después k=3, y después k=4, el resultado sería:
Leer (&x, 7) carga b_7 ... b_1 en x_6 ... x_0 y se pone x_7 en 0
Leer (&x, 3) carga b_0 en x_2, y c_7... c_6 en x_1 ... x_0, y se pone x_7..x_3 en 0
Leer (&x, 4) carga c_5 ... c_2 en x_3 ... x_0 y se pone x_7..x_4 en 0
Saludos,
Álvaro