10進数から2進数、2進数から10進数にするには?

解決


sannshain  2003-11-26 01:17:17  No: 110196

ビット演算で10進数から2進数する方法を詳しく教えて下さい。初心者なんでプログラムつけてほしいです。あと2進数から10進数にする簡単な方法教えて下さい。こちらもプログラムお願いします。+−両方の値に対応できるようにお願いします。


sannshain  2003-11-26 01:19:10  No: 110197

お願いします。


nanashi  2003-11-26 02:55:01  No: 110198

一度16進数に変換してから2進数に変換すれば+−を意識しなくてすみます。

Private Function Number_To_Bit(ByVal lNumber As Long) As String
    Dim sData$, sBuff As String
    Dim lData&, lCnt As Long
    
    '16進数に変換
    sBuff = Hex$(lNumber)
    
    '2進数作成
    Do Until (Len(sBuff) = 0)
        '4ビットずつ変換
        lData = Val("&H" & Right$(sBuff, 1))
        sBuff = Left$(sBuff, Len(sBuff) - 1)
        
        For lCnt = 0 To 3
            sData = -((lData And (2 ^ lCnt)) <> 0) & sData
        Next
    Loop
    
    Number_To_Bit = sData
End Function

2進数から10進数にするのも同じです。
一度16進数にしてから10進数に戻せば+−を意識しなくてすみます。
こっちは自分で考えてください。


特攻隊長まるるう  2003-11-26 09:46:53  No: 110199

もともと2の乗数が2×2×2×…ってことが分かれば
桁上がりと掛け算、割り算の問題だからね。小学4年くらいの
算数の知識があればできる問題だよ?(^^;)
初心者のうちは上手くコーディングしようと思わずに自分の
持ってる知識でどうにか工夫するようにしたほうがいいと
思うよ。…まぁ、考えてみて。


sannshain  2003-11-28 22:27:10  No: 110200

ではこのプログラムをCommanndボタンを押す事によってLabelに表示するにはどうしたらいいのでしょうか?


いちゆ  2003-11-28 22:47:01  No: 110201

VB厨!?


解決  2003-11-28 22:53:25  No: 110202

Labelに表示するようにプログラムを作ってください。


sannshain  2003-11-28 22:56:35  No: 110203

どの二進数も16bitであらわしたいのですがそのプログラムがわかりません


いちゆ  2003-11-28 23:01:15  No: 110204

>どの二進数も16bitであらわしたいのですがそのプログラムがわかりません
&hFFFF&をマスクする?


nanashi  2003-11-28 23:03:35  No: 110205

つーか、ちょっとは自分で考えろや。


いちゆ  2003-11-28 23:06:46  No: 110206

VB厨やから…(TдT)


sannshain  2003-11-28 23:29:04  No: 110207

真剣にまったくわからないんです。ごめんなさい


いちゆ  2003-11-28 23:33:15  No: 110208

ん〜、符号はSgn()関数で受け取れるし、LabelはCaptionを変更すればいいんじゃない?
後は、できたことを書いてのお預けよ〜


sannshain  2003-11-29 01:00:53  No: 110209

16ビットで表せるように下のようにプログラムしたんですがどうしても−の2進数ができません。教えていただけないでしょうか。
Dim a, b, c, d, n1, n2, n3
Private Sub Command1_Click()
    a = Val(Text1.Text)
    Label1 = a
    Label2 = Hex(a)
    b = Label2
    
    '2進数作成
    n3 = ""
    Do Until (Len(b) = 0)
        '4ビットずつ変換
        n1 = Val("&H" & Right$(b, 1))
        b = Left$(b, Len(b) - 1)
        
        For n2 = 0 To 15
            n3 = -((n1 And (2 ^ n2)) <> 0) & n3
        Next
    Loop
        Label3 = n3
End Sub


nanashi  2003-11-29 01:36:20  No: 110210

ビックリするぐらい何にも分かってないようですね。
どこから突っ込んでイイやら……。

えーと、まずDim宣言ですが、グローバルにする意味がないのでCommand1_Clickプロシージャ内に宣言した方がいいです。
で、宣言する時は必ず型を宣言して下さい。
型宣言を省略した場合全てVariant型になるので宣言する意味がありません。

16ビットで表すということは、16ビット以上のものは扱わないということになりますので
16ビット以上のデータが来た場合処理を行わないようにした方がいいでしょう。
16ビットの範囲は-32768〜32767です。

For文のところですが、私が書いたもの流用したんでしょうがむやみに16回ループさせる意味はありません。
てゆーか16回もループさせたら正しい答えは出ません。
『4ビットずつ変換』と書いたように4回(0〜3)ループさせます。

16ビットで表示するには16進数に変換した時に足りない桁を0で補えば出来ます。


sannshain  2003-11-29 01:46:16  No: 110211

ありがとうございます。できるかぎり考えてみますが、わからなければまたお願いします。学校でVBやってるんですが、ややこしいのはまったくわからないんで。


sannshain  2003-11-29 08:08:02  No: 110212

ほとんどできたのですがどうしても一つだけわかりません。マイナスの場合はすべて16ビットになるのですが、プラスの場合は4〜16ビットになります。16進数に変換した時に足りない桁を0で補う方法考えたのですがわかりませんでした。どういうプログラムにすればいいのか教えて下さい。


nanashi  2003-12-01 20:36:35  No: 110213

16進数の1桁は4ビットです。
つまり16ビットは16進数では4桁になります。
Hex関数で16進数に換した値が4桁に満たない場合、頭に0を足りないだけ付ければ良いです。
まァループで回しても良いし、String関数でも良いし。
ちなみに私ならRight関数を使います。


sannshain  2003-12-01 23:59:05  No: 110214

Right関数を使い16進数の4桁表示できました。どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加