Permutaciones de número binario intercambiando dos bits (no lexicográficamente)

Estoy buscando un algoritmo que calcule todas las permutaciones de una cadena de bits de longitud dada (n) y la cantidad de bits establecidos (k) Por ejemplo mientrasn=4 yk=2 el algoritmo generará:

1100
1010
1001
0011
0101
0110

Soy consciente de Gosper's Hack que genera las permutaciones necesarias en orden lexicográfico. Pero necesito que se generen de tal manera que dos permutaciones consecutivas difieran en solo dos (o al menos un número constante de) posiciones de bits (como en el ejemplo anterior). Otro bithack para hacer eso sería increíble, pero también una descripción algorítmica me ayudaría mucho.

Respuestas a la pregunta(2)

Su respuesta a la pregunta