c语言bit类型数组,位数组(bit数组)

  • Post author:
  • Post category:其他


使用到位数组的代码,一般出于两个考虑: 1. 降低存储空间。2. 加快查找效率(能迅速判断某个地元素是否在一个集合中)。

知识准备

1. 计算机中的位操作: 与(&)、或(|) 、非(~)

1 & 1 = 1        1 | 1 = 1        ~1 = 0

1 & 0 = 0        1 | 0 = 1        ~0 = 1

0 & 1 = 0        0 | 1 = 1

0 & 0 = 0        0 | 0 = 0

左移一位相当于乘以2。左移操作后,右边空缺位自动补0。右移(本文仅考虑逻辑右移)与左移相反方向操作,相当于除以2,左边空缺自动补0。

3. 置1、置0,判断置位。

11011101 00100000 |——– 11111101若要将它的第4位由1变为0(置0),则只须第4位与0与即可 11011101 11101111 &——– 11001101判断第5位是否置1 11111101 00100000 &——– 00100000 (相与的结果非0则表明相应位已置1,否则置0)

eg: x = 221,其二进制为11011101 11011101 ~——– 00100010

实例演示

假设要求11个数(0~10)存储在位数组里,11个数就需要11个bit位, 而1个byte有8个bit位,故须2个byte才能存储11个数。0存储在第0个byte的第0位,1存储在第0个byte的第1位…存储在第1个byte的第0位,9存储在第1个byte的第1位,10存储在第1