浮動小数点値のXORスワッピングアルゴリズムをC++で使用することはできますか?同じデータ型浮動小数点値のC++ XORスワップ
を持つ個別の変数の値を交換する
のXORビット演算が、私は少し混乱しています:
しかしウィキペディアは言います。このコードで:
void xorSwap (int* x, int* y) { *x ^= *y; *y ^= *x; *x ^= *y; } int main() { float a = 255.33333f; float b = 0.123023f; xorSwap(reinterpret_cast<int*>(&a), reinterpret_cast<int*>(&b)); std::cout << a << ", " << b << "\n"; return 0; }
(少なくともgccの下では)動作するようですが、必要ならばそのような練習が許されていますか?
あなたの浮動小数点変数のデータはちょうど上の他のデータと値のように、単に0と1として格納されていることを忘れないでくださいバイナリコンピュータ。ビットの操作は、そのビットが何を表しているかにかかわらず、まったく同じです。 –
何が問題なのですか? @Someprogrammerdudeはこう言っています:D – ForceBru
'xor'トリックを使わないでください。Wikipediaからのあなたの引用は可能です。あなたが余分な整数(そして現代の組み込みシステムでさえメモリのbucketloadsを持っている)を手に入れることができないほどのメモリがない限り、それは役に立たず、おそらく単純な一時変数の交換よりも遅いかもしれません。それはまだ私たちの古き民の時代に降格されなければなりません。彼らは1K ZX80にコードを詰め込むことを心から覚えています:-) – paxdiablo