首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

不要中间变量交换两个变量的值

2012-12-23 
不用中间变量交换两个变量的值这个算法是由布尔代数的而来, 在布尔代数中 有几个基本的运算, ?与、或、非、异

不用中间变量交换两个变量的值

这个算法是由布尔代数的而来, 在布尔代数中 有几个基本的运算,

?

与、或、非、异或 ?,分别对应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); }

?

通过这个算法可以节约一个栈变量的开销.

?

?

?

?

热点排行