You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言异或交换问题:A与B选项的正确性及区别解析

异或交换操作的选项分析与A、B区别解答

问题:以下哪个选项能实现对(*, *)的交换效果?注:^代表XOR(异或)操作。二进制运算规则:0 XOR 0 = 0,0 XOR 1 = 1,1 XOR 0 = 1,1 XOR 1 = 0。
选项:
A. (x, y): x ^= y ^= x ^= y;
B. (a[x], a[y]): a[x] ^= a[y] ^= a[x] ^= a[y];
C. (x, y): x -= y += x -= y;
D. (a[x], a[y]): a[x] -= a[y] += a[x] -= a[y];
已知C、D逻辑不正确,推测A正确,但不清楚A与B选项之间的区别是什么?

核心结论

A能正确交换两个独立变量;B仅在数组下标x≠y时有效,若x=y(即交换数组同一位置的元素)会导致数据丢失。

具体区别分析

  • 选项A的逻辑:
    操作对象是两个独立的变量x和y,链式写法x ^= y ^= x ^= y等价于三步独立异或操作:

    1. x = x ^ y
    2. y = y ^ x(此时x已是第一步的结果,即原始x^y)
    3. x = x ^ y(此时y已是第二步的结果,即原始x)
      因为x和y是独立存储的变量,每一步都能获取到正确的中间值,最终完成交换,且不存在边界错误。
  • 选项B的逻辑:
    操作对象是数组元素a[x]和a[y]:

    • 当x≠y时,两个数组元素是独立的内存位置,逻辑和A完全一致,能正常交换。
    • 当x=y时,a[x]和a[y]指向同一块内存。第一步a[x] ^= a[y]会把该位置的值变为原始值 ^ 原始值 = 0,后续两步异或都是基于0运算,最终该位置的值会被置为0,而交换同一个元素本应保持原值不变,这就出现了逻辑错误。

内容的提问来源于stack exchange,提问作者Ader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:25:05