Попытка упростить этот работающий, но длинный код для назначения, включающего манипулирование битовым массивом. Что у меня есть для функции set (устанавливает бит в индексе в массиве равным 1):
// set bit with given index to 1
void BitArray::Set (unsigned int index){
switch( index%8 )
{
case 7:
barray[index/8] = barray[index/8] | 1;
break;
case 6:
barray[index/8] = barray[index/8] | 2;
break;
case 5:
barray[index/8] = barray[index/8] | 4;
break;
case 4:
barray[index/8] = barray[index/8] | 8;
break;
case 3:
barray[index/8] = barray[index/8] | 16;
break;
case 2:
barray[index/8] = barray[index/8] | 32;
break;
case 1:
barray[index/8] = barray[index/8] | 64;
break;
case 0:
barray[index/8] = barray[index/8] | 128;
break;
default: cout << "Error. Index less than 0. Cannot set the bit.";
} // end of switch( index )*/
Итак, я иду к элементу в массиве символов, и в этом элементе я затем просматриваю 8 бит, которые хранятся, и меняю этот индекс.
Вот моя попытка упростить оператор switch:
int location = index / 8;
int position = index % 8;
mask = (1 << position);
barray[location] = barray[location] | Mask(index);
который не работает так, как я намереваюсь (устанавливает бит в индексе 5 на «1», если я передаю 2 в качестве индекса для изменения)
Спасибо за любой вклад
7 - position
) - person harold   schedule 15.04.2015