不用临时变量,交换二个整型变量的值

简介: 早上出门前看时间还早,反正出去等公交也是等,就捞起垫桌脚的一本书(C程序设计),随便翻了翻,看到下面这个方法,记录下来,说不定哪天就用到了: using System; namespace test { class Program { static...

早上出门前看时间还早,反正出去等公交也是等,就捞起垫桌脚的一本书(C程序设计),随便翻了翻,看到下面这个方法,记录下来,说不定哪天就用到了:

using System;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 3;
            int y = 4;

            Console.WriteLine("x={0},y={1}", x, y);//x=3,y=4

            x = x ^ y;
            y = y ^ x;
            x = x ^ y;

            Console.WriteLine("x={0},y={1}", x, y);//x=4,y=3

            Console.WriteLine(1 ^ 0); //1
            Console.WriteLine(0 ^ 0); //0
            Console.WriteLine(1 ^ 1); //0
            Console.WriteLine(0 ^ 1); //1

            Console.ReadKey();
        }
    }
}

明白原理了吗?就是利用异或操作,从最后1,0异或操作的结算来看,异或操作有二个基本特性:

1、满足交换律(即1^0 和 0^1结果相同)

2、相同为0,相异为1(即不同为1)

所以来仔细看下:

x = x ^ y

y = y ^ x 相当于 y = y ^ (x ^ y) = x ^ y ^ y (交换律) = x ^ 0 (y跟y相同,异或结果为0) = x (x跟0异或的结果,内部二进制中的每一位都不变,最终还是x)

这样最终y的值就变成了x

再继续

x = x ^ y 相当于 x = (x ^ y) ^ (y ^ (x ^ y))-即把上面的公式继续替换过来 = x ^ x ^ y ^ y ^ y (交换律) =0^ y ^ 0 (最前面的x ^ x 为0,最后的 y ^ y也为0) = y

这样最终x的值就变成了y

目录
相关文章
|
6月前
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
49 0
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
|
3月前
|
存储
两个变量数值的交换
两个变量数值的交换
|
4月前
交换两个变量的值
交换两个变量的值
不使用第三变量。如何对2个数进行交换
不使用第三变量。如何对2个数进行交换
78 0
|
6月前
对调 2个变量的值若干种方式
对调 2个变量的值若干种方式
39 0
运用函数交换两个整型变量
运用函数交换两个整型变量
|
算法
【经典算法问题 二】交换两个变量值,不使用第三个变量
【经典算法问题 二】交换两个变量值,不使用第三个变量
66 0
如何在把创建临时变量的前提下交换两个数(直接上代码)
如何在把创建临时变量的前提下交换两个数(直接上代码)
|
数据安全/隐私保护 C语言
【C语言】交换两个int变量的值,不能使用第三个变量
交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换之后 a=5,b=3
|
开发者 Python
交换两个变量的值 | 学习笔记
快速学习交换两个变量的值,介绍了交换两个变量的值系统机制, 以及在实际应用过程中如何使用。
交换两个变量的值 | 学习笔记
下一篇
无影云桌面