我正在阅读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”的目的是什么。任何线索将不胜感激!
答案 0 :(得分:3)
如果nb小于CHAR_BIT,您仍然需要至少一个字符。
答案 1 :(得分:3)
是的,它会计算保存位数需要多少char
个。添加的东西是围绕它。
答案 2 :(得分:2)
记住除法是整数除法:没有“......和三分之八”。假设您想要分组到大小为6的插槽(是的...我知道CHAR_BIT
是8或更多)
(1 + 6 - 1) / 6 == (6 / 6) == 1
(5 + 6 - 1) / 6 == (10/6) == 1
(6 + 6 - 1) / 6 == (11 / 6) == 1
(7 + 6 - 1) / 6 == (12 / 6) == 2