您的位置:首页 > 其它

位图排序示例

2016-02-01 20:04 260 查看

第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类型变化,一般为31using 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: