Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


24086 / 76738 ←次へ | 前へ→

【58006】Re:上位下位4の求め方
発言  ichinose  - 08/9/27(土) 9:24 -

引用なし
パスワード
   ▼向井 さん:
おはようございます。

>>正直ですね!! プログラミングは、将来必要ないんですか?
>販売系の会社に就職が決まったのですが
>Excel自体バイトでの売り上げ入力しかしたことが
>なかったので少しは使えるようになろうと勉強はじめました。
再質問があってよかった。まちがってたので・・・・。


>
>>    If RIdx Mod 16 = 0 Then
      Cells(RIdx, 2).Value = RIdx / 16

'      これだけで よいです。
>>     Cells(RIdx, 3).Value = 0
>>     End If
>最初の箇所で16の倍数を条件にしているのは分かったのですが

>(RIdx / 16) And 15
これでも動作しますが、And 15 は、無意味なので・・・。


16の倍数でない場合でも上位の4Bitを求めるなら


Cells(RIdx, 2).Value =(RIdx And (15 * 16)) / 16

これです。

ミスったお詫びに解説です。

10進数では、例えば、1500という数字の百の位を基準に値を求める時には、

1500/100=15 という計算をしますよね? 

これで2桁を右にシフトしていることになります。

これは、1500÷10^2=15 ですよね?

つまり 1の位が 10^0
    10の位が 10^1
   100の位が 10^2

だから、

1500÷10^2=15 という計算式を立てるのですよね?

元の問題に戻って、

>該当する数字の上位4ビットと下位4ビットを求める

つまり、1バイトのを半分区切ったそれぞれを求めるということです。
でも、今度は、pcのメモリの単位ですから、数字が二進数になります。

例えば、10進数で 16を 2進数で表すと

00010000 ですよね?

これを上位4Bit(左から、4Bit)の値を求めるには?

上記の00010000が10進数なら、
 ÷10000(10^4)で4桁の右シフトが出来ますが、

00010000は 2進数なので
  2^4という値で割らなければ桁をシフトできません。

よって、2^4=16 ですから、

 Cells(RIdx, 2).Value = RIdx / 16


というコードになります。

次いで、

Cells(RIdx, 3).Value = 0

としたのは、下位4Bitは、16の倍数なら、常に0だからです。


先に記述した


>16の倍数でない場合でも上位の4Bitを求めるなら


> Cells(RIdx, 2).Value =(RIdx And (15 * 16)) / 16

これ・・・。
これで16の倍数でなくても上記4Bitが求められます。

RIdx And (15 * 16) -----> RIdx And (15 * 2^4)

この部分は、下位4Bitに値があっても 上記の演算で 0000になります。

つまり、RIdx And (15 * 16)  の演算で元の値を超えない16の倍数になっています。

ですから、↑この部分は、

Ridx \ 16

とか

int(Ridx/16)

でも良いです。
1 hits

【57990】上位下位4の求め方 向井 08/9/26(金) 1:52 質問
【57991】Re:上位下位4の求め方 ichinose 08/9/26(金) 6:46 発言
【58005】Re:上位下位4の求め方 向井 08/9/27(土) 0:30 質問
【58006】Re:上位下位4の求め方 ichinose 08/9/27(土) 9:24 発言
【58064】Re:上位下位4の求め方 向井 08/9/30(火) 22:07 お礼

24086 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free