tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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ビットは元の値から引き継いだビット並びです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。