位图排序示例
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
相关文章推荐
- Android属性动画(一)之基本用法
- python 递归和装饰器
- String比较相等的问题探索
- 记录数据库操作到文本
- Redis工作系列之一 与 Memcached对比理解
- iOS深度学习 - Runtime
- Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)
- Java中对象调用机制
- Javascript学习笔记6——BOM
- android *** Layout 11 ProgressBar && RatingBar && SeekBar
- T-SQL:GO语句和批处理
- (2)Mac环境搭建
- usleep和sleep的区别
- 如何在eclipse中配置arm交叉编译环境
- Andorid-15k+的面试题。
- 一个驱动支持多个设备再usb子系统、input子系统、platform、iic子系统 中的实现
- Appcan学习手记(2)——UI框架及布局定位
- MySQL存储过程
- Qt国际化相关类(以前没见过codec->toUnicode,QTextCodec,QLocale.toString和QLocale::setDefault,QInputMethod::locale())
- 第二次作业<2>