这个算法是由布尔代数的而来, 在布尔代数中 有几个基本的运算,
与、或、非、异或 ,分别对应C语言中的 &、|、~、^运算符号
其中运算的规则是:
与:
& 0 1
-------------
0 0 0
1 0 1
或:
| 0 1
-------------
0 0 1
1 1 1
非:
~
---------
0 1
1 0
异或:
^ 0 1
-------------
0 0 1
1 1 0
在布尔代数中,单个位的运算等同于该位上相同方向向量的运算,由异或的规则,可以推导到出规则
a ^ a = 0
根据这个原则,我们可以设计出不用中间变量,交换两个变量的算法:
#include <stdio.h>
void change(int* a, int* b) {
*b = *a ^ *b;
*a = *a ^ *b;
*b = *a ^ *b;
}
int main() {
int x = 8;
int y = 9;
printf("before change x=%d, y=%d\n", x, y);
change(&x, &y);
printf("after change x=%d, y=%d\n", x, y);
}
通过这个算法可以节约一个栈变量的开销.
分享到:
相关推荐
示例代码:不经过中间变量交换两个数的值。 附带代码注释
在程序中实现交换两个数的功能并不复杂,但如果不使用中间变量,需要动一下脑筋。在本文介绍了两个方法(其实原理都是一个)。其基本原理是数的中和。也是说,通过某种运算(二元运算)将a和b两个数变成一个数,并...
method 1: a,b = b,a method 2: a = a+b b = a-b ... 您可能感兴趣的文章:python交换两个变量的值方法对Python中实现两个数的值交换的集中方法详解对变量赋值的理解–Pyton中让两个值互换的实现方法
本文主要描述,如何不使用中间值,将两个变量的值进行交换。 一、普通做法 var a = 1, b = 2, tmp; tmp = a; a = b; b = tmp; 普通的做法就是声明多一个临时变量tmp,进行数据交换过程中的缓存。这样的做法直观...
Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于...
以前闲聊的时候朋友说有一种方法,不需要中间变量,就可以将两个变量的内容交换。
群中的题目,不过这样大众脸的题想必大家都见过,就看能玩出什么新花招
在平时的业务开发或者面试过程中,经常会遇到交换两个变量这种问题,于是,个人总结以下几种交换变量的方法: 1.方案一 使用一个临时变量来交换 2.方案二 使用ES6解构赋值语法来交换 3.方案三 利用数组 根据...
今天在这里我们就来看看,在PHP中如何在不使用第三变量的情况下,达到交换两个变量值得目的。详细的解说见代码注释,下面来一起看看吧。 一、substr() && strlen() 代码: <?php /** * 双方变量为字符串时,...
Delphi变量值交换演示示例,使用中间变量法、加减法、乘除法、异或法、汇编法等方法演示变量值交换,在网上收集的一些两个变量值的交换法,抛砖引玉。希望高手多给建议,谢谢。
本篇文章是对在php中交换两个变量的值的方法进行了详细的分析介绍,需要的朋友参考下
1.使用加减法; var a=1; var b=2; a=a+b; b=a-b;...2.使用乘除法(乘除法更像是加...以上所述是小编给大家介绍的JS实现不用中间变量temp 实现两个变量值得交换方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言
下面的方案都不会有临时变量,我总结了一下,其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值,这样可以先改变另一个变量值, 最后改变原修改的变量值 比如这个 a += b; b = a - b; a
Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将其置于Java...
方法一:使用第三方变量交换数据; 方法二:使用加减法,并且不使用第三方变量 思路:a加上b的和,减去a,就等于b,再用这个数减去b,就等于a。 方法三:使用异或方法交换,并且不使用第三方变量 ...
不用定义中间变量,仅使用位运算来实现两个整数的交换