物流公司做网站有用吗,河北省住房和城乡建设网站,上海建设网站是多少,公司简介视频制作位图的原理#xff1a;
在位图中采用比特位表示对应的元素存在或者不存在 0#xff1a;不存在 1#xff1a;存在例如一个int整数有32个比特位可以表示0-31个整数。 再举一个例子 存入的数字为8988 首先#xff1a; 8988/32 280 其次#xff1a; 8988%32 28 再来一个例…位图的原理
在位图中采用比特位表示对应的元素存在或者不存在 0不存在 1存在例如一个int整数有32个比特位可以表示0-31个整数。 再举一个例子 存入的数字为8988 首先 8988/32 280 其次 8988%32 28 再来一个例子 存入的数字16 首先 16/32 0 其次 16%3216
位图的应用
给两个文件分别有100亿个整数我们只有1G内存如何找到两个文件交集。
将第一个文件的数据分成1000份存储到位图里再判断第二份文件中的数据是否在位图中。
源码
测试代码
#include stdio.h
#include BitMap.hint main()
{BitMap bm;BMInit(bm,100000);int i, j; // 插入数据for (i 0; i 100000; i) {BMSetOne(bm, i);}// 判断数字是否在位图里面for (j 990; j 100010; j) {if (BMTestOne(bm, j) ! 0) {printf(数字 %d存在于位图, 返回值 %d\n, j, BMTestOne(bm, j));} else {printf(数字 %d不存在于位图, 返回值 %d\n, j, BMTestOne(bm, j));}}return 0;
}运行结果
数字 99993存在于位图, 返回值 33554432
数字 99994存在于位图, 返回值 67108864
数字 99995存在于位图, 返回值 134217728
数字 99996存在于位图, 返回值 268435456
数字 99997存在于位图, 返回值 536870912
数字 99998存在于位图, 返回值 1073741824
数字 99999存在于位图, 返回值 -2147483648
数字 100000不存在于位图, 返回值 0
数字 100001不存在于位图, 返回值 0
数字 100002不存在于位图, 返回值 0
数字 100003不存在于位图, 返回值 0
数字 100004不存在于位图, 返回值 0
数字 100005不存在于位图, 返回值 0
数字 100006不存在于位图, 返回值 0
数字 100007不存在于位图, 返回值 0
数字 100008不存在于位图, 返回值 0
数字 100009不存在于位图, 返回值 0位图占用的空间大小 unsignedint 的取值范围是0到2^32-14 294 967 296-1大约40亿 申请了约2^32/8512M的内存 源码
优质参考 https://blog.csdn.net/tonglin12138/article/details/93382025