评论“新发现” 2007-10-30 16:32

哎,冲动是魔鬼。本以为是什么发现呢,其实是很简单的道理,只不过我们不去思考吧了。今天无聊时,想起他们的运算效率问题。从而发现实现两着交换用乘法,减法也可以的。哎,开始发现时是那么激动仔细一想其实很普通的,为自己下。不说这个了。

看看他们的效率如何。

#include <windows.h>
#include <iostream>

#pragma comment(lib,"Kernel32.lib")

int main()
{
 int a = 3,b = 6,c = 0;
 DWORD start = 0,end = 0;
 start = GetTickCount();
 a = a + b;
 b = a - b;
 a = a - b;
 end = GetTickCount();
 c = end - start;
 std::cout<<"c is: "<<c<<std::endl;
 std::cout<<"a is: "<<a<<std::endl;
 std::cout<<"b is: "<<b<<std::endl;
 std::cout<<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<<std::endl;
 start = GetTickCount();
 a = a * b;
 b = a / b;
 a = a / b;
 end = GetTickCount();
 c = end - start;
 std::cout<<"c is: "<<c<<std::endl;
 std::cout<<"a is: "<<a<<std::endl;
 std::cout<<"b is: "<<b<<std::endl;
 std::cout<<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<<std::endl;
 start = GetTickCount();
 a = a ^ b;
 b = a ^ b;
 a = a ^ b;
 end = GetTickCount();
 c = end - start;
 std::cout<<"c is: "<<c<<std::endl;
 std::cout<<"a is: "<<a<<std::endl;
 std::cout<<"b is: "<<b<<std::endl;
 system("pause");
 return 0;
}

代码是这样的。输出的结果是:

c is: 0
a is: 6
b is: 3
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
c is: 0
a is: 3
b is: 6
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
c is: 0
a is: 6
b is: 3

效率一样。呵呵。

你们受骗了,其实效率是不一样的。当他们翻译成汇编后你就回发现 ^ 运算最复杂,但是那是小于微秒级的运算,所以系统被忽略掉了,所以我们看到结果总是0。GetTickCount获取至今的微秒数。

猜你喜欢

转载自www.cnblogs.com/lu-ping-yin/p/10988569.html