代码之家  ›  专栏  ›  技术社区  ›  xyz

交换期间堆栈溢出

  •  2
  • xyz  · 技术社区  · 17 年前

    如何在不使用第三个变量的情况下处理在交换两个变量时发生的溢出。我相信异或解只能用于整数。其他变量类型呢?

    6 回复  |  直到 17 年前
        1
  •  4
  •   Larry Osterman    17 年前

    这不是一个答案,但不适合发表评论。

    在什么情况下,您的运行距离可用堆栈存储的边缘如此之近,以至于在交换中额外使用临时变量会导致您遇到困难?

    我可以看到一些嵌入的场景,但我很难想象这样一个场景,在这个场景中,堆栈空间会非常紧张,以至于这一点很重要(在这里,您不用汇编语言编写代码)。

        2
  •  2
  •   chaos    17 年前

    异或可以用于任何可以让异或运算符处理的操作;它是二进制数据的属性,而不是用于表示整数的二进制数据的属性。

        3
  •  2
  •   sigjuice    17 年前

    一点也不做。异或交换算法很酷。它 shouldn't be used 在生产代码中。

        4
  •  0
  •   rlbond    17 年前

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

    int x = 10;
    int *p1 = &x;
    int *p2 = p1;
    
    *p1 = *p1 ^ *p2;
    *p2 = *p1 ^ *p2;
    *p1 = *p1 ^ *p2;
    
    /* now x == 0 :( */
    
        5
  •  0
  •   RandomNickName42    17 年前

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

        6
  •  0
  •   tefozi    17 年前
    a = a + b;
    b = a - b;
    a = a - b;
    

    这对整数和浮点有效。