【发布时间】:2018-09-20 16:02:53
【问题描述】:
是否可以在 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,就像二进制计算机上的任何其他数据和值一样。无论这些位代表什么,对位的操作都是一样的。
-
有什么问题?您从 Wikipedia 引述说它是可能的,这是正确的,因为@Someprogrammerdude 所说的:D
-
请不要使用
xor技巧。除非您的内存太少以至于无法负担额外的整数(甚至现代嵌入式系统都有大量内存),否则它是没有用的,而且它可能比简单的临时变量交换慢。它应该归于我们这些老人的时代,他们仍然深情地记得将他们的代码塞进 1K ZX80 :-) -
通过指向不同的、不相关类型的指针访问数据是未定义的行为。还是我错过了 C++ 标准的一些新发展?
-
除了这是否能正常工作的问题之外,试着用它自己交换一个值。
标签: c++ floating-point swap xor