環境に依存するけど、単にn>>31でも良いのでは?

環境依存しないようにするなら、unsignedをつけて
>>971にandをかませば良いと思う。

unsigned int fill(unsigned int n) {
unsigned int a;
a = n & 0x80000000ul;
return a & (a - (a >> 31))
}

ただし、MSBが1でないときに何を返したいかによってはダメだけど