现在的位置: 首页 > 综合 > 正文

C语言 最快的两数交换

2013年10月06日 ⁄ 综合 ⁄ 共 614字 ⁄ 字号 评论关闭

搬运自:http://hi.baidu.com/evergreen19/blog/item/dbc1d5f13241c3a5a50f5245.html

最近开始写,RC4,由于要使用不少的swap,所以swap的算法效率对RC4的整体速度是有着不小的影响的,因此总结了一些不错的交换算法与大家共享。

int a=5,b=7;

方法一:   内联汇编,利用堆栈区 -- Swapping containers

__asm{

       push a

       push b

       pop a

       pop b

    }

  

方法二:使用异或运算

a = a^b;

b = a^b;

a = a^b;

或写成:

a^=b;

b^=a;

a^=b;

方法三:加法交换

a = a+b;

b = a-b;

a = a-b;

方法二和三原理相同:

利用反函数的性质,函数 c=f(a, b),必须存在反函数,a = g(c, b);

这样,可以用

a = f(a, b);

b = g(a, b);

a = g(a, b);

三步交换两个数


方法四:利用XCHG 指令--- 使用专用指令(Dedicated instructions

__asm{

       mov eax,a

       xchg eax,b

       mov a,eax

    }

不过需要使用寄存器的大小,如:

116CPU所含有的数据寄存器有: (AXBXCXDX)

2 32CPU所含有的数据寄存器有:(EAXEBXECXEDX)


抱歉!评论已关闭.