Я хотел заменить бит/биты (более 1) в 32/64-битном поле данных, не затрагивая другие биты.Скажем, например:
У меня есть 64-битный регистр, где биты 5 и 6 могут принимать значения 0,1,2,3.
5:6
0 0
0 1
1 0
1 1
Когда я читаю регистр, я получаю значение 0x146(0001 0 10 0 0110).Теперь я хочу изменить значение в битовой позиции 5 и 6 на 01. (сейчас это 10, что равно 2 в десятичной системе счисления, и я хочу заменить его на 1 e 01) без изменения других битов и записать обратно регистр с измененными только битами 5 и 6. (так что после изменения он становится 126)
Я пробовал сделать это
reg_data=0x146
reg_data |= 1 << shift (shift in this case is 5)
Если я сделаю это, значение в битовых позициях 5 и 6 станет 11(0x3), а не 01(0x1), как я хотел.
Установка бита - это нормально, но более одного бита - это для меня сложно.
Любые предложения будут высоко оценены.