【问题标题】:explanation of bit array implementation in C-FAQC-FAQ中位数组实现的解释
【发布时间】:2011-09-21 14:48:46
【问题描述】:

我正在阅读 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”的目的是什么。任何线索将不胜感激!

【问题讨论】:

    标签: c bitmap


    【解决方案1】:

    是的,它计算需要多少chars 来保存这些位。添加的东西是为了让它四舍五入。

    【讨论】:

      【解决方案2】:
      • 这是一种四舍五入的方式。

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

      【讨论】:

        【解决方案3】:

        记住除法是整数除法:没有“...和八分之三”。假设您要分组到大小为 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
        • ...

        【讨论】:

          猜你喜欢
          • 2013-04-21
          • 1970-01-01
          • 2011-09-29
          • 1970-01-01
          • 2019-05-28
          • 2011-04-14
          • 1970-01-01
          • 2018-04-23
          • 2019-07-25
          相关资源
          最近更新 更多