交换数字

编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。

示例:

输入: numbers = [1,2]
输出: [2,1]
提示:

numbers.length == 2
-2147483647 <= numbers[i] <= 2147483647

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-numbers-lcci

 

这道题目是不允许我们使用额外变量来进行值的交换的

那么我们在这里介绍一种位运算的技巧

首先我们需要知道关于异或运算的一些性质:

  异或满足交换律和结合律

    x ^ x = 0

    x ^ 0 = x

为了更加清楚的表现出来,我们列一个表格来清楚的展示

  a的值 b的值
初始值 a b
a = a^b a^b b
b = a^b a^b a^b^b
a = a^b a^b^a^b^b a^b^b
结束 b a

注意:如果在引用的是同一个变量的时候,使用位运算来交换变量的话会使得这个变量变为0

 

代码:

#include<bits/stdc++.h>

using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    a = a^b;
    b = a^b;
    a = a^b;
    cout <<"a= "<< a << " " << " b="<< b << endl;
    return 0;
}

 

posted @ 2021-11-01 12:58  爱慕6  阅读(48)  评论(0)    收藏  举报