テストは Windows XP(SP2), Pentium 4, Visual C++2003で。
 以下のコードで、最適化をかけずにビルドすると
何故か 結果がおかしいです。

float swappp(const float f)
{
  unsigned int r = *(unsigned int*)&f;
  r =    ((r >> 24) & 0xff)
      | ((r << 24) & 0xff000000)
      | ((r >> 8) & 0xff00)
      | ((r << 8) & 0xff0000);
  return *(float *)(&r);
}