объяснение реализации битового массива в C-FAQ - PullRequest
1 голос
/ 21 сентября 2011

Я читал вопрос C-FAQ № 20.8, который в основном касается битовых массивов:

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

Один из определенных макросов выглядит примерно так:

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

Предназначен ли этот макрос для вычисления количества элементов (или слотов) в массиве символов (каждый слот = 8 бит)?Я не уверен, что делает этот макрос, в частности, какова цель "+ CHAR_BIT -1 / CHAR_BIT".Любые подсказки будут оценены!

Ответы [ 3 ]

3 голосов
/ 21 сентября 2011

Да, он вычисляет, сколько char необходимо для хранения битов. Дополнение состоит в том, чтобы сделать его округленным.

3 голосов
/ 21 сентября 2011
  • Это способ округления.

Если nb меньше, чем CHAR_BIT, вам все равно понадобится хотя бы один символ.

2 голосов
/ 21 сентября 2011

Помните, что деление является целочисленным делением: здесь нет "... и три восьмых".Предположим, вы хотите сгруппировать в слоты размером 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
  • ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...