SWAP期间的堆栈溢出

时间:2009-04-04 22:21:34

标签: overflow swap

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

6 个答案:

答案 0 :(得分:4)

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

在什么情况下你会如此靠近可用堆栈存储的边缘运行,为交换额外使用临时变量会给你带来困难?

我可以看到一些嵌入式场景,但我很难想象你的堆栈空间如此紧张的情况,这很重要(你不用汇编语言编写代码)。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

完全不做。 XOR交换算法很酷。它是生产代码中的shouldn't be used

答案 3 :(得分:0)

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

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

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

/* now x == 0 :( */

答案 4 :(得分:0)

XCHG出了什么问题?不需要堆栈,没有溢出(进位标志)?设置:)。

答案 5 :(得分:0)

a = a + b;
b = a - b;
a = a - b;

这适用于整数和浮动。