- ベストアンサー
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関数をご教示ください 宜しくお願いいたします
- みんなの回答 (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
その他の回答 (2)
- tatsu99
- ベストアンサー率52% (391/751)
1.言語はVB6でしょうか。VB.NETでしょうか。 2.10進数:-16072 → 2進数:1100 0001 0011 1000 というのは、文字列で「-16072」が与えられた時、文字列として、「1100 0001 0011 1000」を取得したい、ということでしょうか。
補足
ご回答が遅くなりました 1、VB6 2、数値で -16072(D) が与えられた時、文字列として、「1100 0001 0011 1000」を取得 ご説明不足で申し訳ございません。よろしくお願いいたします
- taisuke555
- ベストアンサー率55% (132/236)
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
お礼
ご教示いただき有難う御座いました 大変助かりました
お礼
ご教示いただき有難う御座いました 大変助かっております。 有難う御座います