タイトル : Re^5: データ書き込みについて 投稿日 : 2007/08/02(Thu) 10:57 投稿者 : よねKEN
考え方を書きます。書き戻す処理のためにはOR演算子も使用します。 1バイト(=8ビット)の10進数126(2進数で01111110)から 上位5ビットを書き換える場合を例に取ります。 (1) 上位5ビットを取り出す 01111110 ← 126 AND 11111000 ← 上位5ビットが1のマスクを用意する(10進数で248、16進数でF8) -------------- 01111000 ・・・(a) 下位3ビットは不要なので、(a)を3ビット右にシフトすると 00001111 ・・・(b) となります(10進数で15、16進数でF) これで上位5ビットを取り出せました。 (2) この15という数値を20(16進数で14、2進数で10100)に書き換えるとします。 (この値20を(c)とする) (3) 上位5ビットを書き戻す まずは、元の数値126から下位3ビットのみ取り出します。 (取り出した結果を(d)とする) 01111110 ← 126 AND 00000111 ← 上位5ビットが0のマスクを用意する(10進数の7、16進数の7) -------------- 00000110 ・・・(d) この(d)の値の上位5ビットを(c)の値で置き換えるために、 (c)の値を3ビット左にシフトします。結果は、 10100000 ・・・(e) となります(10進数で160、16進数でA0)。 (d)と(e)とをORで合成することで書き換え完了となります。 00000110 ←(d) OR 10100000 ←(e) -------------- 10100110 ←10進数で166、16進数でA6 この答えを検証すると 10100 110 ~~~~~ ~~~ 上位5ビットは書き換えた数値20になっており、 下位3ビットは元の値から引き継いだビット並びです。 |