学习交流加(可免费帮忙下载CSDN资源):
个人微信: liu1126137994
学习交流资源分享qq群1(已满): 962535112
学习交流资源分享qq群2: 780902027
今天有朋友遇到一个笔试题:一个 4096位的bit数组,要找出前10个二进制的1 所在的位置,麻烦写一个函数来实现
bit数组对我来说是一个新的概念,故整理资料学习bit数组的概念~
加qq1126137994一起学习更多技术!!!
文章目录
1、位数组的概念
将一个整数添加到二进制数组中 :
判断一个整数是否在二进制数组中
删除二进制数组中的一个整数
完整代码
1、位数组的概念
所谓的位数组,主要是为了有效地利用内存空间而设计的一种存储数据的方式。在这种结构中一个整数在内存中用一位(1 bit)表示。这里所谓的表示就是如果整数存在,相应的二进制位就为1,否则为0。
主要思想:我们知道一个 char 类型的数据在内存中占用 1Byte(即 8 bit),如果我们用二进制位在内存中的顺序来代表整数则可以存储更多的信息。
这样的话,一个 char 类型可以存储 8个整数。假设 a是一个 char 数组的话,整数8就可以用 a[1] 的第一个二进制位表示了。那么512字节就是4096位,第一位代表0,第二位代表1,第三位代表2,第4096位代表4095,这样我们就可以用512字节存储4096个数了,大大的节省了内存空间。
这里的关键就是 一个char型能表示8个整数。
下面我实现一种利用 char 数组构造一个二进制数组。主要包括以下三个方面::
将一个整数添加到二进制数组中 :
void add_to_bitarray(char *bitarr, int num){ /* num代表要插进数组中的数 */
bitarr[num >> SHIFT] |= (1 << (num & MASK)); /* MASK 为 0x7 */
}
该方法的主要作用是将二进制数组中表示该整数的位置为1。首先我们得找到该整数位于 char 数组的第几个元组中,这里利用该整数除以8即可(代码中除以