C语言 最快的两数交换

搬运自: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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值