再次提醒:位运算确实比模运算快!!!我的实践结果是错误的!!!
引言:
大家都是敲代码的,好多也都是acm选手,相信很多人都经常会遇到分辨奇偶性,有的人喜欢if (n % 2)判奇数,而有的人特别是一些大佬则喜欢if (n & 1)判奇数,两种当然是都能判的,但是问题来了,打acm的玩家会更考虑时间,哪种方法更快呢???
我就正好碰到一个群里的大佬们讨论这个问题,于是就有了这次实践,然而结果却是...........
实践目的:
用自己的电脑实测一下位运算与模运算的快慢
实践过程:
跑时环境: 开机有不短的时间了,把在用的后台清了一下,写了两个程序分开跑2e9次for循环,,两个程序基本没差,用clock()函数计时,总的来说环境比较粗糙,也算是一时兴起才测的
两个程序 :
//位运算
#include<bits/stdc++.h>
using namespace std;
const int maxn = (int)2e9;
int x = 3;
int main()
{
clock();
for (int i = 0;i < maxn;i ++)
x & 1;
printf("位运算:%d\n",clock());
return 0;
}
//模运算
#include<bits/stdc++.h>
using namespace std;
const int maxn = (int)2e9;
int x = 3;
int main()
{
clock();
for (int i = 0;i < maxn;i ++)
x % 2;
printf("模运算:%d\n",clock());
return 0;
}
实践结果:
两个程序分别运行了十次,得出的时间求其平均值
对于位运算的结果是:3225.2
对于模运算的结果是:3217.6
结果很明显的错了,具体我也不清楚为什么,大概是环境太粗糙了,
不过还是可以得出一个结论的:
位运算基本与模运算时间没差:
结语:
虽然得出的结果是错误的,但这仍是一次尝试,也挺有趣的,这让我尝到了编程的甜头,有什么好纠结的,用OMG笑容的话来说: 就是干!!!