c语言位数组如何实现,C语言实现位数组(bit数组)与位数组的简单应用举例

学习交流加(可免费帮忙下载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即可(代码中除以

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值