• ベストアンサー

10進数(+-)→2進数への変換(2)

先ほど、ご質問させて頂きました者です、詳細にご説明させて頂きます (1)10進数:-16072 → 2進数:1100 0001 0011 1000 補足:2進数の16bit目の「1」は符号ビット「ー」 (2)10進数:+16072 → 2進数:0011 1110 1100 1000 補足:2進数の16bit目の「0」は符号ビット「+」 補足:10進数の値の範囲は    2進数で 符号1bitを含む16bitの値の範囲です と変換できるVB関数をご教示ください 宜しくお願いいたします

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

基本的には、左側のビットから順にそのビットが1か0かを見ていきます。1であれば文字列の1、0であれば文字列の0を生成します。 VB6には符号無し16ビット整数、ビットのシフト演算子が存在しません。従ってそれなりの工夫が必要となります また&HFFFFは-1となりますので数値の65535を使用します。(&H8000も同様) 以下のような関数を作成してください。 関数の入力値は、符号つきの10進数 関数の戻り値は、ビットイメージの16桁の文字列となります。(4桁毎の空白の区切りはいれていません) ---------------------------------------------- Private Function dec2bit(decNum0 As Integer) As String Dim i As Integer Dim ret As Long Dim decNum As Long 'integer(符号付き16ビット整数)を符号無しの16ビットとして扱う為に以下の操作をする '符号無し16ビット整数はVB6には存在しない為、long型(符号付き32ビット整数)を使用する If decNum0 >= 0 Then '正、0はそのままセット decNum = decNum0 Else '負のときは、そのビットイメージをセット(例-1なら65535) decNum = 65536 + decNum0 End If dec2bit = "" '文字列を作成 For i = 1 To 16 '最上位ビット(最も左側のビット)が1か0か判定 ret = decNum And 32768 '32768は符号無しの&H8000に相当する If ret <> 0 Then dec2bit = dec2bit & "1" Else dec2bit = dec2bit & "0" End If '左へ1ビットシフトする 'VB6はシフト演算子がないので、2倍する decNum = decNum * 2 'オーバーフロー防止の為、符号無しの&FFFFでマスクする If decNum >= 65536 Then decNum = decNum - 65536 End If Next End Function

nao0
質問者

お礼

ご教示いただき有難う御座いました 大変助かっております。 有難う御座います

その他の回答 (2)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

1.言語はVB6でしょうか。VB.NETでしょうか。 2.10進数:-16072 → 2進数:1100 0001 0011 1000 というのは、文字列で「-16072」が与えられた時、文字列として、「1100 0001 0011 1000」を取得したい、ということでしょうか。

nao0
質問者

補足

ご回答が遅くなりました 1、VB6 2、数値で -16072(D) が与えられた時、文字列として、「1100 0001 0011 1000」を取得 ご説明不足で申し訳ございません。よろしくお願いいたします

回答No.1

16進数に直してから変換するのが簡単なような気がします。 Function FromDecimalToBinary(X As Long) As String   Dim X16 As String   Dim Y16 As Integer   Dim Y As String   Dim i As Integer   Dim j As Integer   If (X < -32768 Or X > 32767) Then     Y = "Error"   Else     X16 = Right(String(4, "0") & Hex$(X), 4)     For i = 4 To 1 Step -1       Y16 = "&h" & Mid(X16, i, 1)       For j = 1 To 4         Y = Y16 Mod 2 & Y         Y16 = Y16 \ 2       Next j     Next i   End If   FromDecimalToBinary = Y End Function 又は Function FromDecimalToBinary(X As Long) As String   Dim X16 As String   Dim Y As String   Dim i As Integer   If (X < -32768 Or X > 32767) Then     Y = "Error"   Else     X16 = Right(String(4, "0") & Hex$(X), 4)     For i = 1 To 4       Select Case Mid(X16, i, 1)         Case "0": Y = Y & "0000"         Case "1": Y = Y & "0001"         Case "2": Y = Y & "0010"         Case "3": Y = Y & "0011"         Case "4": Y = Y & "0100"         Case "5": Y = Y & "0101"         Case "6": Y = Y & "0110"         Case "7": Y = Y & "0111"         Case "8": Y = Y & "1000"         Case "9": Y = Y & "1001"         Case "A": Y = Y & "1010"         Case "B": Y = Y & "1011"         Case "C": Y = Y & "1100"         Case "D": Y = Y & "1101"         Case "E": Y = Y & "1110"         Case "F": Y = Y & "1111"       End Select     Next i   End If   FromDecimalToBinary = Y End Function

nao0
質問者

お礼

ご教示いただき有難う御座いました 大変助かりました

関連するQ&A