C语言实现的bitmap位图代码分享

 更新时间:2014年08月28日 10:09:32   投稿:junjie  
这篇文章主要介绍了C语言实现的bitmap位图代码分享,位图(bitmap)是一种非常常用的结构,在索引、数据压缩等方面有广泛应用,需要的朋友可以参考下

事实上,我们是用每一个 元素表示一个32位的二进制字符串,这样这个元素可以保留相邻32个号码是否存在的信息,数组范围就下降到10000000/32了.例如对于号码 89256,由于89256 mod 32=2789…8,这样我们应该置a[2789]中32位字符串的第8位(从低位数起)为1.

#define WORD 32
#define SHIFT 5 ////移动5个位,左移则相当于乘以32,右移相当于除以32取整
#define MASK 0x1F //16进制下的31
#define N 10000000
int bitmap[1 + N / WORD];
/*
 * 置位函数——用"|"操作符,i&MASK相当于mod操作
 * m mod n 运算,当n = 2的X次幂的时候,m mod n = m&(n-1)
 */
void set(int i) {
 bitmap[i >> SHIFT] |= (1 << (i & MASK));
}
/* 清除位操作,用&~操作符 */
void clear(int i) {
 bitmap[i >> SHIFT] &= ~(1 << (i & MASK));
}
/* 测试位操作用&操作符 */
int test(int i) {
 return bitmap[i >> SHIFT] & (1 << (i & MASK));
}

实现排序(不能重复):

int main(void) {
 FILE *in = fopen("in.txt", "r");
 FILE *out = fopen("out.txt", "w");
 if (in == NULL || out == NULL) {
 exit(-1);
 }
 int i = 0;
 int m;
 for (i = 0; i < N; i++) {
 clear(i);
 }
 while (!feof(in)) {
 fscanf(in, "%d", &m);
 printf("%d/n", m);
 set(m);
 }
 printf("abnother");
 for (i = 0; i < N; i++) {
 if (test(i)) {
  printf("%d/n", i);
  fprintf(out, "%d/n", i);
 }
 }
 fclose(in);
 fclose(out);
 return EXIT_SUCCESS;
}

相关文章

  • Qt实现对齐线功能的示例代码

    Qt实现对齐线功能的示例代码

    这篇文章主要介绍了Qt如何实现对齐线功能,并且可以添加任意数量和自动吸附,文中示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-06-06
  • VS2019简单快速的打包可安装项目(图文教程)

    VS2019简单快速的打包可安装项目(图文教程)

    这篇文章主要介绍了VS2019简单快速的打包可安装项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • c++作用域运算符用法(全局变量和局部变量)

    c++作用域运算符用法(全局变量和局部变量)

    这篇文章主要介绍了c++作用域运算符用法,需要的朋友可以参考下
    2014-04-04
  • C语言中的函数指针基础学习教程

    C语言中的函数指针基础学习教程

    这篇文章主要介绍了C语言中的函数指针基础学习教程,包括函数指针作为参数来传递等重要知识,需要的朋友可以参考下
    2016-04-04
  • C语言中的运算符优先级和结合性一览表

    C语言中的运算符优先级和结合性一览表

    这篇文章主要介绍了C语言中的运算符优先级和结合性一览表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C++11智能指针中的 unique_ptr实例详解

    C++11智能指针中的 unique_ptr实例详解

    unique是独特的、唯一的意思,故名思议,unique_ptr可以“独占”地拥有它所指向的对象,它提供一种严格意义上的所有权。这篇文章主要介绍了C++11智能指针中的 unique_ptr实例详解,需要的朋友可以参考下
    2020-06-06
  • C语言中文件常见操作的示例详解

    C语言中文件常见操作的示例详解

    FILE为C语言提供的文件类型,它是一个结构体类型,用于存放文件的相关信息。本文主要为大家介绍下C语言中几个常见的文件操作的实现,需要的可以参考一下
    2022-12-12
  • C++实现LeetCode(145.二叉树的后序遍历)

    C++实现LeetCode(145.二叉树的后序遍历)

    这篇文章主要介绍了C++实现LeetCode(145.二叉树的后序遍历),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言实现电影院选座管理系统

    C语言实现电影院选座管理系统

    这篇文章主要为大家详细介绍了C语言实现电影院选座管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言实现简易通讯录

    C语言实现简易通讯录

    这篇文章主要为大家详细介绍了C语言实现简易通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12

最新评论