[黑马程序员]对两个整数变量的值进行交换的方法总结

本文介绍了三种在不使用额外变量的情况下交换两个整数的方法:使用第三个变量、数学加减法以及位操作中的异或运算,并详细解释了异或运算交换数值的原理及其在实际应用中的意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------

 

(1)通过第三方变量

int n=3,m=6;

int temp;

temp=n;

n=m;

m=temp;

(2)不用第三方变量[如果n和m的值非常大,容易超出int范围]

int n=3,m=6;

n=n+m;

m=n-m;

n=n-m;

(3)通过异或

int n=3,m=6;

n=n^m;

m=n^m;

n=n^m;

以下是自己对此方法的理解:

(此方式用的原理是 n=n^m^m 及一个数亦或另一个数两次 及还是这个数本身 下面我们验证一下)
n=3写成二进制是00000011
m=6写成二进制是00000110
我们先来看下 n^m 结果
            00000011
     ^     00000110
-----------------------
            00000101
及 n^m = 3^6 = 5
我们再用5^6试试
            00000101
     ^     00000110
----------------------
            00000011
及5^6 = 3
也就是 n^m^m = 3^6^6 = 3
这是它的原理 这个原理在真正实践中被用来加密 因为中间数(6)只有本人知道 所以 要想解密就必须知道这个中间数

下面我们就来看下
int n , m ;
n = n^m;
m = n^m;
n = n^m;

它每一步都是将 n储存空间的数据 与 m储存空间的数据 进行异或 你要理解 在每一步 这两个储存空间的值 是多少
n存储空间 m储存空间

       n         m
             |
             |
       n = n^m;
             |
             |
n存储空间 m储存空间

       n    ^     m m
             |
             |
m = n^m = (n^m)^m = n;
             |
             |
n存储空间 m储存空间

       n    ^     m n
             |
             |
n = n^m=(n^m)^n=m;
             |
             |
n存储空间 m储存空间

     m            n

 

------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值