计算二进制数有多少个‘1’

来源:互联网 发布:91白苹果修复软件 编辑:程序博客网 时间:2024/04/27 20:08

简述:

写个小函数统计一个int数字的二进制数中有多少个1, 通过时间记录100000次运算开销,观察两种算法耗时


知识点:

1. 移位操作

2. windows库的时间统计


代码:

#include<iostream>#include<windows.h>using namespace std;//& 0x01 by bit and then do 1 bit shiftint NumCount1(int a){int num = 0;while(a){num += a & 0x01;a >>= 1;}return num;}//minus 1 then &int NumCount2(int a){int num = 0;while(a){a &= (a - 1);num++;}return num;}int main(){    LARGE_INTEGER  large_interger;    double dff;    __int64  start, end;    /*************************NumCount1******************************/    QueryPerformanceFrequency(&large_interger);    dff = large_interger.QuadPart;    cout << 100000 << ", number of '1' is " << NumCount1(100000) << ",  ";    QueryPerformanceCounter(&large_interger);    start = large_interger.QuadPart;for(int i = 0;i < 100000;i++)NumCount1(10000000);/************************************************************/    QueryPerformanceCounter(&large_interger);    end = large_interger.QuadPart;    cout << "Count1: " << (end - start) * 1000 / dff << "微秒" << "\n\n";    /*************************NumCount2*****************************/    cout << 100000 << ", number of '1' is " << NumCount2(100000) << ",  ";    QueryPerformanceCounter(&large_interger);    start = large_interger.QuadPart;for(int i = 0;i < 100000;i++)NumCount2(10000000);    QueryPerformanceCounter(&large_interger);    end = large_interger.QuadPart;    cout << "Count2: " << (end - start) * 1000 / dff << "微秒" << "\n\n";    /************************************************************/return 0;}

输出:


原创粉丝点击