2

我们如何在不使用第三个变量的情况下处理两个变量交换期间发生的溢出问题。我相信 XOR 解决方案只能用于整数。其他变量类型呢?

4

6 回答 6

4

这不是答案,但不适合评论。

在什么情况下,您会在可用堆栈存储的边缘附近运行,以至于额外使用临时变量进行交换会给您带来困难?

我可以看到一些嵌入式场景,但我很难想象这样一个场景,你会在堆栈空间上如此紧张以至于这很重要(你不是用汇编语言编写代码)。

于 2009-04-04T22:26:47.600 回答
2

XOR 适用于您可以让 XOR 运算符处理的任何内容;它是二进制数据的属性,而不是用于表示整数的二进制数据的属性。

于 2009-04-04T22:25:54.263 回答
2

根本不做。XOR 交换算法很酷。它不应该在生产代码中使用。

于 2009-04-04T22:53:22.887 回答
0

XOR 解决方案适用于任何可以按位复制的类型,而不仅仅是整数。但是,不要将变量与自身进行异或:即

int x = 10;
int *p1 = &x;
int *p2 = p1;

*p1 = *p1 ^ *p2;
*p2 = *p1 ^ *p2;
*p1 = *p1 ^ *p2;

/* now x == 0 :( */
于 2009-04-04T22:27:58.330 回答
0

XCHG有什么问题?不需要堆栈,没有溢出(携带标志)?设置任一:)。

于 2009-07-02T07:31:49.520 回答
0
a = a + b;
b = a - b;
a = a - b;

这适用于整数和浮点数。

于 2009-07-02T07:38:51.863 回答