プロが教えるわが家の防犯対策術!

先ほど、ご質問させて頂きました者です、詳細にご説明させて頂きます

(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関数をご教示ください
宜しくお願いいたします

A 回答 (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
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/05/21 13:15

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」を取得

ご説明不足で申し訳ございません。よろしくお願いいたします

補足日時:2004/05/15 07:33
    • good
    • 0

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/05/21 13:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!