【问题标题】:Which languages have a primitive operation for swapping variables?哪些语言具有交换变量的原始操作?
【发布时间】:2012-04-05 05:03:00
【问题描述】:

在大多数语言中,如果你想交换两个变量,就像这样:

var c = b
b = a
a = c

是的,如果您愿意,您可以使用 XOR 进行花哨的 hack,但对于单个操作,通常需要 3 行代码。是否有任何语言将交换变量作为语言中的原语?

【问题讨论】:

  • 要清楚一点,即使它是语言的原始语言,它仍然可能被翻译成机器代码中的 3 个不同的操作,除非您的机器代码支持纯交换(在 x86 上,您可以使用 XCHG 运算符,但这意味着您还希望同步对内存的访问,这实际上可能会使其变慢)。所以换句话说,你选择的语言中有多少行代码对编译/jitted代码中实际发生的事情几乎没有影响,因此可能对实际代码性能影响很小。
  • XOR 技巧不是一种花哨的技巧,而是一种可憎的东西。如果您在一个无法为临时节省一点额外存储空间的系统中运行,那么通过简单传输序列进行布尔运算的额外 CPU 负载也可能会让您失望。有时,您应该只优化可读性:-)

标签: variables programming-languages language-features


【解决方案1】:

Lua、Python、Ruby 等支持这种表示法:

a, b = b, a

而且 javascript 当然也不需要临时变量 ;)

a = -(b = (a += b) - b) + a;

有关如何交换变量的更多示例(86 种语言),请参阅:http://rosettacode.org/wiki/Generic_swap

【讨论】:

    【解决方案2】:

    在大多数动态语言中,您可以执行以下操作来交换:

    a, b = b, a
    

    现在 a 的值为 b,b 的值为 a。我不确定这是否是您的意思。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2020-07-25
      • 2022-01-10
      相关资源
      最近更新 更多