いつもお世話になっております。
環境は、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型にするにはどうしたら良かったのでしょうか?
過去ログ:LOWORD,HIWORDについて
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200610/06100054.txt
会社合併>< さん こんにちは。
> 現実には、全くマスクか掛からずにオーバーフローします^^;
数値リテラルのデータ型指定が無いからですね。
> Const lngcMask as long=&HFFFF
の「&HFFFF」は、Integer型なので、10進数の「-1」つまり、
Long型16進数の「&HFFFFFFFF」と同じです。
> Const lngcMask as long=&HFFFF&
と、「&」を指定して「Long型である事を明記」すれば大丈夫だと思います。
Blueさん
過去ログの検索が、非常に甘かったようです。
以後気をつけます。
大吉末吉さん
ほっ、本当です!!
いろんな意味で納得しました。
お二方ありがとうございました〜ToT
ツイート | ![]() |