C++ (gcc), 124124 113 bytes
-11 bytes thanks to @ceilingcat
#import<string>
std::stringauto a(int n){std::string f;for(int i=30,j,k;++i<127;j=nk;++i<127;f+=i*!j,j=n){k=i;whilefor(kk=i;k;k/=2)j-=k&1,k/=2;f+=i*!j;}return=k&1;return f;}
Iterates through the printable character codes, finds those that match the number of 1 bits desired, returns the string containing those characters concatenated.