Как бит хранится в массиве? - PullRequest
0 голосов
/ 02 ноября 2019

При выполнении домашней работы у меня возник вопрос о битах.

Как сохранить биты в массиве int8_t?

И как я могу получить доступ к этим битам?

Вот пример кода

void someting_with_bits(int8_t bit_array[])
{
  //Do sometings...
}

Если есть такая функция,

, когда я вызываю bit_array [0], возвращаю ли я 8 битов длины, таких как 11100011?

Если это так, как я могу получить доступ к первым битам bit_array [0]?

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Да, он будет сохранен как 11000011 в одном блоке массива.

Чтобы получить доступ к указанному биту, вам нужно сдвинуть его, а затем И со специальной маской.

Например, для доступа к старшему биту bit_array[0]:

int8_t highest_bit = (bit_array[0] >> 7) & 0x1;

для доступа к старшим 4 битам bit_array[0]:

int8_t highest_4_bits = (bit_array[0] >> 4) & 0xf;
0 голосов
/ 02 ноября 2019

Если вы хотите получить доступ к отдельным битам каждого целого числа, вы можете выполнить некоторые битовые манипуляции. например, если вы хотите проверить 3-й младший значащий бит целого числа, И это с 0x4 (100). Также вы можете сдвинуть свой int 2 раза вправо, а затем AND с 0x1. например, чтобы проверить 5-й младший значащий бит целого числа с индексом 3 в вашем массиве:

bool theBit = (bit_array[3] >> 4) & 0x1;

Конечно, вы можете использовать набор битов. http://www.cplusplus.com/reference/bitset/bitset/

например, для доступа к 3-му младшему значащему биту 32-разрядного целого числа (не забудьте включить заголовок набора битов):

int32_t number = 233;
std::bitset<32> bits(number);
std::cout << "The 3rd ls bit is: " << bits[2] << std::endl; 
...