Возможно ли использовать алгоритм замены XOR с поплавковыми значениями в C++?C++ XOR swap on float values
Однако википедия говорит, что:
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;
}
это, кажется, работает (по крайней мере в ССЗ), но я обеспокоен, если такая практика допускается, если это необходимо?
Помните, что данные для ваших переменных с плавающей запятой сохраняются как только нулей и единиц, так же как и любые другие данные и значения на двоичный компьютер. Работа над битами будет работать одинаково, независимо от того, что представляют эти биты. –
В чем проблема? Ваша цитата из Википедии говорит, что это возможно, и это правильно из-за того, что @Someprogrammerdude сказал: D – ForceBru
Пожалуйста, не используйте трюк 'xor'. Это бесполезно, если у вас не хватает памяти, что вы не можете позволить себе дополнительный целочисленный (и даже современные встроенные системы имеют bucketloads памяти), и это, вероятно, * медленнее *, чем простая замена переменной temp. Это должно быть отнесено ко временам старых людей, которые по-прежнему с любовью вспоминают, как tring втискивает свой код в 1K ZX80 :-) – paxdiablo