2進数で表現したときに、最下位ビットを0番としてa番目だけが1になる数です

答書いちゃうけど
unsigned int flp32(unsigned int x) {
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return x - (x >> 1);
}


機種依存の方法を使うなら、組み込みのビットスキャンを使うなり、
浮動小数にキャストしてSIMDレジスタ上でごにょごにょ(ry