Я думаю, что эффект, который вы пытаетесь достичь, (используя данные в качестве примера, но выкладываете информацию несколько иначе):
bitmask = 1001001
bitset = 11 01
result = 1111011
Теперь, если мы описываем это как работу справа налево (сначала младший значащий бит), то финальная 1 из набора битов означает, что необходимо установить самый правый 0 из битовой маски. Ноль в битовом наборе означает, что следующий 0 битовой маски не изменился; следующая 1 означает, что третий ноль преобразуется в единицу; и самый значащий 1 означает, что четвертый ноль преобразуется в 1. Так как в наборе битов больше нет единиц, то это последнее изменение. Обратите внимание, что такая формулировка алгоритма позволяет избежать проблем с количеством битов в наборе битов или битовой маске, тогда как интерпретация слева направо приводит к большим проблемам.
Давайте рассмотрим другие примеры:
bitmask = 1001001 1001001 1100011000 0000000101001001
bitset = 11 00 10 00 110 010 11100 1 00 11
result = 1111001 1101001 1111011010 0011100111001111
bitmask = 01001101 01001011 11000010 0000000011111111
bitset = 1 10 1 1 10 1 110 1 1101
result = 11101111 11101111 11011011 0000110111111111
Если эта интерпретация верна, то значение набора бит варьируется в зависимости от битовой маски. Если битовая маска и набор битов ограничены 8 битами, то для каждого набора битов вы, вероятно, в конечном итоге вычисляете набор из 256 значений, которые могут быть ИЛИ с исходным значением битовой маски для получения результата. С другой стороны, вы можете так же легко вычислить результат, как значение, которое будет OR в основных данных.