2) Номера бит и байт начинаются с 0.
Т.е. последний бит имеет номер 255.
Однако, если мы будем читать биты порциями, при этом размер байта
не кратен порции, то это значит, что возможны байты результата,
не полностью заполненные количеством X битов.
Но цикл-то всегда имеет X итераций!
Для этого и существует "предохранитель" - проигнорировать лишние рабочие циклы в конце преобразования в тех случаях, когда они
имеются.
3) Нет. Относительные номера бит меняются от 0 до 7.
Значит, если достигнут номер 7, следующий относительный номер 0.
Но уже в следующем байте, поэтому номер байта увеличивается.
4) Если все байты нужно заполнить, значит:
....
int TotalBits;
int TotalBytes;
TotalBits = 32*8;
TotalBytes = TotalBites / X;
/*
если есть остаток от деления, значит нужен ещё один байт
и именно этот последний байт будет содержать число бит < X
Поэтому:
*/
if(TotalBites % X) ++TotalBytes;
...