2011-08-02 19 views
1

最初の8ビット[BIT7:BIT0]を変更してその値を書き戻そうとしています。 以下のコードはそれを達成していますか?32ビット整数のビット操作

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

また、これを達成する最も効率的な方法です。何か提案やコメントは高く評価されます。

+0

右括弧が多すぎますが、明白な意図が正しいです(EboMikeによって 'new_value <256': –

答えて

3

new_valueが広い、あなたがそれを確実にしなければならない唯一の8ビットを保証されていない場合:

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

また、それはそれを達成するための最も効率的な方法ですか?

塩の価値のあるコンパイラは、それを右のものに変換します。

2

new_valueは、< 256であることが保証されており、これらが符号なし整数であると仮定すると、これは適切な方法です。

+0

が指定されているという規定が適用されます)。 * unsigned *を保証することは、私が忘れたものでした - 良い点。 – mlp

関連する問題