Добрым вечер,битой математики и маска корреляция с номерами
Я пытаюсь соотнести необходимые значения для значений, которые необходимо отправить на устройства I2C, и у меня возникли проблемы с битовой математикой и маскировкой.
Мой диапазон от -15 до 15, так же как и диапазон устройства. Example of required values
Вот что я использую, чтобы добраться до нужных значений, кажется, работает, насколько я могу судить. «number1» - это значение Power On для этого регистра.
int number1 = 254;
int number2 = 14;
int number3;
int number4;
if (number2 <= 0) {
number3 = number2 + 15;
}
else {
number3 = (number2^15) | 16; // XOR 0b00001111 then Set bit 4
}
number4 = (number1 & 0b11100000) + number3;
У меня возникли проблемы, пытаясь выяснить, как установить/убрать 5 необходимые биты в регистре, который 8 бит, не затрагивая 3 наивысших бита.
Я думаю, что у меня это есть, но это похоже на такой неэффективный способ сделать это, есть ли лучший способ сделать это?
Благодаря,
DW
Нет ничего плохого в том, как вы очищаете биты. Я обычно вижу HEX-литералы в побитовых операциях (будет 'number4 = (number1 & 0xE0) + number3;' в вашем примере), но это не имеет большого значения. – Eran
Спасибо за ваш комментарий, я буду помнить об этом. – Deskwizard