2011-08-02 64 views
1

我试图读取32位寄存器,修改其前8位[BIT7:BIT0]并回写其值。 下面的代码是否实现了这个目标?对32位整数进行位处理

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

这也是最有效的方式来实现that.any建议或意见表示赞赏。

+0

右括号太多,但明显的意图是正确的(与EboMike确定的'new_value <256' :) –

回答

3

除非new_value被广泛保证只有8位,你应该确保它:

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

而且是最有效的方式来实现这一目标?

任何值得其盐的编译器都会将其转化为正确的东西。

2

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

+0

快照的规定。并确保*无符号*是我忘了 - 好点。 – mlp