Long型をinteger型にするには

解決


会社合併><  2006-11-29 22:29:31  No: 134356

いつもお世話になっております。
環境は、WinXP+VB6.0です。
ビット演算でLong型をintegr型際に符号ビットの取扱いで悩んでいますので
御教授お願いします。

<目的>
Long型(32bit)の上位16bitをマスクし、下位16BITのみをinteger型(16bit)に保存したい。

<問題点>
値 &H10000を&H0に変換するのに次のように実行しています。

Const lngcMask as long=&HFFFF
Dim lngData as long
Dim intData as integer

lngData=&H10000
intData=Cint(lngData and lngcMask)

MsgBox intData

自分のイメージとしては、前16bitがマスクされ
下位16bitのみintger型に代入されるつもりが、
現実には、全くマスクか掛からずにオーバーフローします^^;

確実に下位2バイトのみinteger型にするにはどうしたら良かったのでしょうか?


Blue  2006-11-29 22:53:31  No: 134357

過去ログ:LOWORD,HIWORDについて
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200610/06100054.txt


大吉末吉  2006-11-29 22:54:27  No: 134358

会社合併><  さん  こんにちは。

> 現実には、全くマスクか掛からずにオーバーフローします^^;
数値リテラルのデータ型指定が無いからですね。

> Const lngcMask as long=&HFFFF
の「&HFFFF」は、Integer型なので、10進数の「-1」つまり、
Long型16進数の「&HFFFFFFFF」と同じです。

> Const lngcMask as long=&HFFFF&

と、「&」を指定して「Long型である事を明記」すれば大丈夫だと思います。


会社合併><  2006-11-29 23:14:13  No: 134359

Blueさん
  過去ログの検索が、非常に甘かったようです。
  以後気をつけます。
大吉末吉さん
  ほっ、本当です!!
  いろんな意味で納得しました。

お二方ありがとうございました〜ToT


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加