Вы должны знать ширину символов (в битах) на вашем компьютере.Для почти всех это 8. Вы можете использовать константу CHAR_BIT
из limits.h
в программе на Си.Затем вы можете сделать довольно простую математику, чтобы найти смещение бита (в зависимости от того, как вы их подсчитываете).
Нумерация битов слева, с битом 2 in в [0], бит 0,2-битный бит 7, а 2-битный в [1] бит 8, это дает:
offset = 513 / CHAR_BIT; /* using integer (truncating) math, of course */
bit = 513 % CHAR_BIT;
a[offset] |= (0x80>>bit)
Существует много здравых способов нумерации битов, вот два:
a[0] a[1]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 This is the above
7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 This is |= (1<<bit)
Вы можете также нумеровать с другого конца массива (обрабатывая его как одно очень большое число с прямым порядком байтов).