异或运算交换两个数的值

简介: 异或运算交换两个数的值

交换两个数的值(利用两个数的和,再做减法交换两个数)

a=5.b=10

a=a+b 此时a=15

b=a-b 此时b=10

a=a-b 此时a=5

开始把式子写成了a=a+b-a,后面写不下去了,一直思考为什么要有a=a+b 这个步骤,其实a=a+b-a推出来就是a=b,也就是把b的值直接赋值给a,后面当然没法做了,这是内存,值是会覆盖的。题目的解题思路就是利用两个数的和,所以必要要有第一步,接着后面的逻辑就清楚了。

交换两个数的值通常就都是创建一个临时变量,还有一种是利用的二进制,异或运算。

异或运算两种理解:

一种是相同为0,不同为1,

另一个角度是:

当左边的数为0时,其结果就和右边的数一样

当左边的数为1时,其结果就和右边的数取反

所以a ^ b就是:

左边的a,如果位数为0,表示原值a和b的这个位数是一样的,那么b的这个位数就不需要改

左边的a,如果位数为1,表示原值a和b的这个位数是不一样的,那么b的这个位数就需要取反。


后面还没有想的很清楚,还要再思考,等待后续。。


相关文章
|
算法
把数组里面数值排成最小的数
把数组里面数值排成最小的数
35 1
交换两个数的值的方法(三种)
交换两个数的值的方法(三种)
67 1
不使用第三变量。如何对2个数进行交换
不使用第三变量。如何对2个数进行交换
79 0
判断一个数是否是对称数(数组/非数组解法)
判断一个数是否是对称数(数组/非数组解法)
【C两数交换】实现ab交换居然有三种方法?
【C两数交换】实现ab交换居然有三种方法?
152 0
【C两数交换】实现ab交换居然有三种方法?
|
算法
算法练习——(1)找数组中唯一成对的那个数(异或)
——如何找数组中唯一成对的那个数(数组特殊) 1-1000这一千个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。 每个数组元素只能访问一次,设计一个算法,将他找出来;不用辅助储存空间,设计一个算法实现.
112 0
输出最小的数位和等于x并且各个数位都不一样的值
输出最小的数位和等于x并且各个数位都不一样的值
46 0
|
C语言
异或交换两个数的值
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/80180470 异或交换两个数的值是资源开销最小的方法,不需要中介数,原理简单的来说就是异或的负负得正。
985 0