ビット演算で10進数から2進数する方法を詳しく教えて下さい。初心者なんでプログラムつけてほしいです。あと2進数から10進数にする簡単な方法教えて下さい。こちらもプログラムお願いします。+−両方の値に対応できるようにお願いします。
お願いします。
一度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進数に戻せば+−を意識しなくてすみます。
こっちは自分で考えてください。
もともと2の乗数が2×2×2×…ってことが分かれば
桁上がりと掛け算、割り算の問題だからね。小学4年くらいの
算数の知識があればできる問題だよ?(^^;)
初心者のうちは上手くコーディングしようと思わずに自分の
持ってる知識でどうにか工夫するようにしたほうがいいと
思うよ。…まぁ、考えてみて。
ではこのプログラムをCommanndボタンを押す事によってLabelに表示するにはどうしたらいいのでしょうか?
VB厨!?
Labelに表示するようにプログラムを作ってください。
どの二進数も16bitであらわしたいのですがそのプログラムがわかりません
>どの二進数も16bitであらわしたいのですがそのプログラムがわかりません
&hFFFF&をマスクする?
つーか、ちょっとは自分で考えろや。
VB厨やから…(TдT)
真剣にまったくわからないんです。ごめんなさい
ん〜、符号はSgn()関数で受け取れるし、LabelはCaptionを変更すればいいんじゃない?
後は、できたことを書いてのお預けよ〜
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
ビックリするぐらい何にも分かってないようですね。
どこから突っ込んでイイやら……。
えーと、まずDim宣言ですが、グローバルにする意味がないのでCommand1_Clickプロシージャ内に宣言した方がいいです。
で、宣言する時は必ず型を宣言して下さい。
型宣言を省略した場合全てVariant型になるので宣言する意味がありません。
16ビットで表すということは、16ビット以上のものは扱わないということになりますので
16ビット以上のデータが来た場合処理を行わないようにした方がいいでしょう。
16ビットの範囲は-32768〜32767です。
For文のところですが、私が書いたもの流用したんでしょうがむやみに16回ループさせる意味はありません。
てゆーか16回もループさせたら正しい答えは出ません。
『4ビットずつ変換』と書いたように4回(0〜3)ループさせます。
16ビットで表示するには16進数に変換した時に足りない桁を0で補えば出来ます。
ありがとうございます。できるかぎり考えてみますが、わからなければまたお願いします。学校でVBやってるんですが、ややこしいのはまったくわからないんで。
ほとんどできたのですがどうしても一つだけわかりません。マイナスの場合はすべて16ビットになるのですが、プラスの場合は4〜16ビットになります。16進数に変換した時に足りない桁を0で補う方法考えたのですがわかりませんでした。どういうプログラムにすればいいのか教えて下さい。
16進数の1桁は4ビットです。
つまり16ビットは16進数では4桁になります。
Hex関数で16進数に換した値が4桁に満たない場合、頭に0を足りないだけ付ければ良いです。
まァループで回しても良いし、String関数でも良いし。
ちなみに私ならRight関数を使います。
Right関数を使い16進数の4桁表示できました。どうもありがとうございました。
ツイート | ![]() |