对32位整数进行逐位操作

时间:2011-08-02 04:44:04

标签: c bit-manipulation

我正在尝试读取32个寄存器,修改其前8位[BIT7:BIT0]并写回其值。 下面的代码是否达到了这个目标?

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

这也是实现这一目标的最有效方式。感谢任何建议或意见。

2 个答案:

答案 0 :(得分:3)

除非new_value仅保证8位宽,否则应确保它:

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

这也是实现这一目标的最有效方法吗?

任何有价值的编译器都会将其转化为The Right Thing。

答案 1 :(得分:2)

假设new_value保证< 256,并假设这些是无符号整数,那么是的,这是正确的方法。