こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

文字型変数を使って2進数表示すると、最上位ビットに1を立てると値に-記号が入ってしまいます

VB6.0
WindowsXP

掲題の件ですが以下のコードを使って16進数を2進数表示にしていますが、最上位ビットに1を立てると値がおかしくなってしまいます。

Private Sub Form_Load()
Dim dat(5) As Variant
Dim i As Variant

dat(0) = Right("0000000000000000" & Hex2Bin(Hex(&HFFFF)), 16)
dat(1) = Right("0000000000000000" & Hex2Bin(Hex(&HFFFE)), 16)
dat(2) = Right("0000000000000000" & Hex2Bin(Hex(&HFF00)), 16)
dat(3) = Right("0000000000000000" & Hex2Bin(Hex(&HF000)), 16)
dat(4) = Right("0000000000000000" & Hex2Bin(Hex(&HF0F0)), 16)
dat(5) = Right("0000000000000000" & Hex2Bin(Hex(&H7FFF)), 16)

For i = 0 To 5
Label1.Caption = Label1.Caption & dat(i) & vbCrLf
Next

Label2.Caption = "FFFF" & vbCrLf & "FFF0" & vbCrLf & "FF00" & vbCrLf & "F000" & vbCrLf & "F0F0"
End Sub
Public Function Hex2Bin(Hex)
Dim Dec
Dec = CInt("&H" + Hex)
Hex2Bin = Dec2Bin(Dec)
End Function

Public Function Bin2Hex(Bin)
Dim Dec
Dec = Bin2Dec(Bin)
Bin2Hex = Hex(Dec)
End Function

Public Function Dec2Bin(ByVal Dec)
Do
Dec2Bin = CStr(Dec Mod 2) & Dec2Bin
Dec = Dec \ 2
Loop Until Dec = 0
End Function

Public Function Bin2Dec(Bin)
Dim i As Integer
For i = 1 To Len(Bin)
Bin2Dec = Bin2Dec * 2 + CInt(Mid(Bin, i, 1))
Next
End Function

なぜこうなってしまうのか、最上位に1を入れても1000000000000
のように表示させるにはどうしたらよいか教えていただきたいです。
よろしくお願いします。

投稿日時 - 2006-07-14 09:53:57

QNo.2275102

すぐに回答ほしいです

質問者が選んだベストアンサー

VBはよく知らないのですが検索したところ符号なし整数型はないようですね
integerをlongにすれば何とかなるかも
Dec = CInt("&H" + Hex)

Dec = CLng("&H" + Hex)

投稿日時 - 2006-07-14 10:47:13

お礼

できました。
ありがとうございました。

投稿日時 - 2006-07-14 11:06:17

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問