解釋

2011-09-21 51 views
1

我讀的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

是的,它會計算需要多少個char來保存位。另外的東西是讓它四捨五入。

3
  • 這是一個收尾的方法。

如果nb小於CHAR_BIT,則至少需要一個字符。

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
  • ...
+0

感謝您的詳細解答! – maxpayne