首页 > 其他 > 详细

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

时间:2019-06-07 18:08:54      阅读:75      评论:0      收藏:0      [点我收藏+]

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

看看他们的效率如何。

#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获取至今的微秒数。

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

原文:https://www.cnblogs.com/lu-ping-yin/p/10988569.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!