C-FAQ中位阵列实现的解释

时间:2011-09-21 14:48:47

标签: c bitmap

我正在阅读C-FAQ问题编号:20.8,主要处理位数组:

http://c-faq.com/misc/bitsets.html

其中一个定义的宏看起来像:

#define BITNSLOTS(nb) ((nb + CHAR_BIT - 1) / CHAR_BIT)

这个宏是否意味着计算char数组中的元素(或槽)的数量(每个槽= 8位)?我不确定这个宏在做什么,特别是“+ CHAR_BIT -1 / CHAR_BIT”的目的是什么。任何线索将不胜感激!

3 个答案:

答案 0 :(得分:3)

  • 这是一种整理的方式。

如果nb小于CHAR_BIT,您仍然需要至少一个字符。

答案 1 :(得分:3)

是的,它会计算保存位数需要多少char个。添加的东西是围绕它。

答案 2 :(得分:2)

记住除法是整数除法:没有“......和三分之八”。假设您想要分组到大小为6的插槽(是的...我知道CHAR_BIT是8或更多)

  • 1个元素:1个插槽:(1 + 6 - 1) / 6 == (6 / 6) == 1
  • ...
  • 5个元素:1个广告位:(5 + 6 - 1) / 6 == (10/6) == 1
  • 6个元素:1个插槽:(6 + 6 - 1) / 6 == (11 / 6) == 1
  • 7个元素:2个广告位:(7 + 6 - 1) / 6 == (12 / 6) == 2
  • ...