码迷,mamicode.com
首页 > 编程语言 > 详细

位图排序示例

时间:2016-02-02 00:05:06      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:位图排序

技术分享第0行

第1行(32-63),依次类推。

C++代码如下:

/** @file          Bitmap

 *  @copyright     personal

*  @brief         接口头文件

 *  @version       v1.0.0

 *  @author        fangyuan

 *  @date          2015/10/20

 *  @note          测试版本

 */

#include "iostream"

#include <math.h>

#include "vector"

#define INT_BYTES sizeof(int)                                    //int型所占字节

#define INT_BITS (8*INT_BYTES)                                   //int型所占位数

#define MAXNUM (1024*1024*1024)                                  //最大数

#define SHIFT_BIT (int)(log(double(INT_BITS))/log(double(2)))    //最大移位数,左移一位等价于*2,即最大^SHIFT_BIT

#define MASK (INT_BITS-1)                                       //根据int类型变化,一般为31

using namespace std;

 

 

//int bitmap[MAXNUM/INT_BITS];        //超出数组范围定义

vector<int> bitmap(MAXNUM/INT_BITS);  //自动初始化为,若非C++,可自定为list;

 

void set(int i)

{

//i>>SHIFT_BIT等价于i/INT_BITS,i & MASK等价于i%MASK,取余的分母一般为^n-1

    bitmap[i>>SHIFT_BIT] |= 1<<(i & MASK);  //当前位,置为1,再进行或运算

}

//获取第i行,第j列

bool get(int i,int j)

{

    //return (bitmap[i>>SHIFT_BIT] & 1<<(i & MASK));

    return (bitmap[i] & 1<<(j & MASK));

}

int main()

{

    set(2);

    set(3);

    set(50000000);

    set(100);

    set(50);

    //不按数字遍历,按行遍历,减少遍历次数

    for(int i = 0; i < bitmap.size(); ++i)

    {

        if( !bitmap[i] ) 

       {

           continue;

       }

       for(int j = 0; j <= MASK;++j)

       {

           bool result = get(i,j);

           if(result)

           {

              cout << i*INT_BITS+j << endl;

           }  

       }

    }

    system("pause");

    return 0;

}

本文出自 “爱幻想的菜鸟” 博客,请务必保留此出处http://3dot1415926.blog.51cto.com/8887443/1740530

位图排序示例

标签:位图排序

原文地址:http://3dot1415926.blog.51cto.com/8887443/1740530

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!