битовая манипуляция с 32-битным целым - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь прочитать 32-разрядный регистр, изменить его первые 8 битов [BIT7: BIT0] и записать обратно его значение. Достигает ли этого кода ниже?

reg_val = register_read(register_object);
reg_val = ((reg_val & 0xffffff00) | new_value));
register_write(register_object,reg_val);

Также это самый эффективный способ добиться этого. Любые предложения или комментарии приветствуются.

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Если new_value не гарантируется только 8 бит в ширину, вы должны обеспечить его:

reg_val = ((reg_val & 0xffffff00) | (new_value & 0xff));

И это самый эффективный способ добиться этого?

Любой компилятор, достойный своей соли, переведет это в The Right Thing.

2 голосов
/ 02 августа 2011

Если предположить, что new_value гарантированно будет <256, и предположить, что это целые числа без знака, то да, это правильный способ сделать это. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...