【问题标题】:How to swap two variables in one line in C? [duplicate]如何在C中的一行中交换两个变量? [复制]
【发布时间】:2023-03-21 08:00:01
【问题描述】:

我想知道有没有其他方法可以在一行中交换 2 个数字,当然没有第三个变量。

我知道这样做的一种方法:

b=a+b-(a=b) 

a=a+b-(b=a)

两者相同(大约)。如果你知道,请帮帮我。

【问题讨论】:

  • 为什么要这样做?使代码不可读只是为了避免使用第三个变量
  • a/=b=(a=a*b)/b; 乘除而不是加减?
  • 您的两个示例方法都在 C 中调用未定义的行为,因为您正在修改变量并在同一表达式中使用其值。
  • 使用 ^,如 a ^= (b ^= (a ^= b))
  • 尝试寻找异或交换。

标签: c


【解决方案1】:

您可能正在寻找的经常被引用的经典答案是:

a^=b^=a^=b;

但是,这在技术上是错误的,因为它在一个序列点之前不止一次地改变了同一个变量。

【讨论】:

    【解决方案2】:

    在 C 中使用位旋转。以下交换两个变量:

    if (a != b) { 
       a ^= b ^= a ^= b;
    }
    

    【讨论】:

    • 这是未定义的行为,因为同一个变量被修改了两次。
    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2013-04-18
    • 2023-02-04
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多