公式アカウントからの投稿が始まります

2進数→10進数への変換 また その逆
を作成したのですが、どのようにすれば良いのでしょうか?
宜しくお願いいたします

A 回答 (5件)

私も考えてみました。

(マイナスについては考慮していません。)
あまりテストしてないので間違えてたらすみません。

'10進→2進
Function FromDecimalToBinary(X As Long) As String
  Dim Y As String
  If (X < 0) Then
    Y = "Error"
  Else
    Do
      Y = X Mod 2 & Y
      X = X \ 2
    Loop While (X > 0)
  End If
  FromDecimalToBinary = Y
End Function
'2進→10進
Function FromBinaryToDecimal(X As String) As Long
  Dim i As Integer
  Dim Y As Long
  '2進チェック
  If (Replace(Replace(X, "0", ""), "1", "") <> "") Then
    Y = -1
  Else
    For i = 0 To Len(X) - 1
      Y = Y + Mid(X, Len(X) - i, 1) * 2 ^ i
    Next i
  End If
  FromBinaryToDecimal = Y
End Function

Private Sub Command1_Click()
  '10進→2進
Label1 = FromDecimalToBinary(Text1)
End Sub

Private Sub Command2_Click()
  '2進→10進
Label1 = FromBinaryToDecimal(Text1)
End Sub
    • good
    • 1

10進から2進ならなんとか


intTestが10進で、intBit(1 to 16)が2進です


If intTest And &H1 Then
intBit(1) = 1
Else
intBit(1) = 0
End If
If intTest And &H2 Then
intBit(2) = 1
Else
intBit(2) = 0
End If

  以下同様に&H4から&H8000まで
    • good
    • 1

No.2を回答した者ですが、


タイトルだけを拝見してカテゴリを算数の分野と思い込んで夢中で回答してしまいました。

したがってNo.2はVBカテでの回答ではございません。
大変失礼いたしました。
    • good
    • 0

a進数のn桁目の数字がp(0≦p≦a-1)であるということは、


aの(n-1)乗がpあるという意味です。

ものすごくわかりにくい説明なので、例を使って具体的に説明します。

2進数の数「10011」を10進数であらわすとき、

2進数の「10011」というのは
2の4乗×1 (=16×1  =16
2の3乗×0 (=8×0   =0
2の2乗×0 (=4×0   =0
2の1乗×1 (=2×1   =2
2の0乗×1 (=1×1   =1
という意味ですから、
これを10進数であらわすと
(16+2+1=)19になります。


また、10進数の「58」を2進数であらわしてみると

58=32+16+8+2
  =(2の5乗×1)+(2の4乗×1)+(2の3乗×1)+(2の1乗×1)

ですから、2進数であらわすと111010です。


ここまでくれば当たり前ですが、10進数の数字もおなじ意味です。
26053=20000+6000+50+3
     =10000×2 + 1000×6 + 10×5 + 1×3
     =(10の4乗×2)+(10の3乗×6)+(10の1乗×5)+(10の0乗×3)

自分でも説明が下手だと思いますが、わかっていただけたでしょうか。
    • good
    • 0

'A を2進数 Bを10進数とすると



' テキストボックス名を Text1とする
’ラベルをLabel1とする
'Text1に2進数を代入した時のサブルーチンに
-----------------------
Dim A As String
Dim B As Integer
A = Text1.Text
B=0
'K = 2の乗数とする
K = 0
'LAはテキストA の長さ
LA = Len(A)

'Aの文字列を右側から0か1かを調べる
For I = LA To 1 Step -1
 '1の場合
 If Mid(A, I, 1) = "1" Then

  'Bの値を増やす
  B = B + 2 ^ K
 End If
 K = K + 1
Next I
'Label1に10真数を代入
Label1.Caption = B
---------------------------
考え方でいうとこんなところですか。
プログラムとしてはこのままでは善くないです。
TEXT1の値に01だけの集合であるかの判断が
必要です。

この場合 例えば 
Aに 11 を代入すると
B = 2~0 + 0~1 = 3 となります

8進数や16進数は関数があります。
-------------------------
10進数から2進数への変換も必要なら
書きますが...いかがですか?
    • good
    • 1
この回答へのお礼

早速のご回答有難うございます
 誠に恐縮ではございますが、宜しくお願いいたします

お礼日時:2004/05/14 18:39

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