Я хотел заменить бит/биты (более 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), который я хотел.
- Как мне делать чтение/изменение/запись?
- Как заменить только определенные бит/биты в 32-битных полях, не затрагивая все данные поля, используя C?
Настройка бит в порядке, но более одного бита, мне сложно это сделать.
Любые предложения приветствуются.