2014-10-20 4 views

ответ

-1

Предполагая, что вы нумерация бит 0 .. 4095.

Затем 6 бит представляют собой индекс в байты растровых и 6 бит представляют бит в пределах элемент массива.

, если у вас есть

unsigned int bit ; 

затем

unsigned int index = (bit >> 6) & 63 ; 
    uint64_t mask = 1 << (bit & 63) ; 

    if (array [index] & mask) 
      // bit is set 
+0

массив [] содержит данные - битмаска будет отделена от этого, указывая, какие значения в массиве [] содержат достоверные данные. Таким образом, маска не должна быть побитовой AND'ed с массивом []. Однако я не уменьшил вас. –

0

Поскольку это (непомеченная) домашнее задание, я не буду давать код, но:

Во-первых: что такое растровый? Он использует значения отдельных битов в переменной отдельно, а не интерпретирует значение в целом. Итак, если вам нужно растровое изображение, чтобы указать, какой из 64 блоков используется, вам понадобится 64 бита - для этого понадобится 64-разрядный тип. Если вам нужно растровое изображение для каждого из отдельных байтов в «блоке», то эта же идея сохраняется, но вы можете использовать карту меньшего размера (однобайтное растровое изображение) и многое другое из них, очевидно.

Затем вам нужно получить доступ к каждому биту индивидуально - есть побитовые операторы, которые делают это проще. Бит 0 будет указывать состояние блока 0 (unset или 0 = unused, 1 или set = used), бит 63 будет указывать состояние блока 63. Побитовое И между значением, которое имеет бит блока, d хотел бы проверить, и растровое изображение вернет, используется ли этот блок. Легко визуализировать биты в типе данных, открывая программы калькулятора и устанавливая их в режим «программист».

Настройка немного проста - вы можете поразрядно или установить бит. Сброс немного сложнее, если вы не знакомы с ним, но легко, как только вы поняли концепцию побитовых операций.

Смежные вопросы