搬运自: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
}
不过需要使用寄存器的大小,如:
1、16位CPU所含有的数据寄存器有: (AX、BX、CX和DX)
2、 32位CPU所含有的数据寄存器有:(EAX、EBX、ECX和EDX)