Излагая ответ Ави:
int i = setbits(0xAB = b10101011, 5, 3, 0xAA = b10101010);
i equals 0x93 = b10010011
Скажите, что я = 0xAB. В двоичном виде это: 10101011
Давайте нумеруем каждую битовую позицию.
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 1
Самый правый бит (наименее значимый) - это позиция "0". Самым левым (самым значимым) является положение "7".
Таким образом, следующие два значения, p и n, говорят: «Вы хотите изменить n битов, начиная с бита p». Так что, если p = 5 и n = 3, вы хотите начать с бита номер 5, и всего вы модифицируете 3 бита. Что означает биты 5, 4, 3. «101» в этом примере.
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 1
| |
---------
(Modifying these three bits)
Как мы их модифицируем? Мы их заменяем. С другим набором из 3 бит. Три младших разряда из y.
Так вот у:
Position #: 7 6 5 4 3 2 1 0
Bit: 1 0 1 0 1 0 1 0
А самыми правыми битами будут биты 2, 1, 0. или значение «010». Конечно, если значение n = 6, вам нужно заменить эти шесть битов из i на «101010» - самые правые 6 битов.
Итак, ваша задача - взять указанные биты из i - в данном случае «101» - и заменить их указанными битами из y - «010».
Если вы сделаете это, возвращаемое значение будет
1 0 1 0 1 0 1 0