どうも,こんにちは
初めて書き込みます
今後ともよろしくお願いしま〜す
え〜と,今ちょっと計算機を作っているんですが
その計算機に16と2進数に変える機能を付けたいんです
つまり,計算後の答えを3つのテキストボックスに入れそれを変換したいんです
どうすればいいでしょうか?
ちなみにVBはまだ本を見ないと書けないくらい初心者です。(^^;
16進数にはHexという関数があるので、それを使います。
2進数は自分で計算してください^^;
2進数ですが、よく数学の本に2で割っていって
余りをうしろから拾っていくという方法が載ってます。
(念のため何をやっているか書いておくと
2で割れたら1の位(2の0乗)に1がたって
その商をまた2で割れたら2の位に(2の1乗)に1が・・・
というような感じです。)
他にもっとよい方法があるかもしれませんが
何も思いつかなければこれを実装してはどうでしょう?
すいません、括弧の中の説明間違えました。
正確には割って余ったらです。
プログラムならANDをとればいいのではないでしょうか。
ANDの対象を毎回*2すれば順番にビットがとれるし。
皆様ありがとうございました
おかげで16は解決しました!しかし・・・・
2が・・・
すいませんが皆様私はとてもレベルが低いです
計算機で使うnum関数さえ最近覚えたばかりです
なので少し詳しく書いていただきたいのですが,
わがままいって本当にすいませんでした!
とらきちさんの言う計算は、一般的な手段です。
分からなければ身近な"数学に詳しい人"に聞けばわかるかな・・・。
(プログラム専用のやり方というわけではないので、知ってる人なら知ってると思います)
こころさんの言う通り、Andとかを使うのもいいですねぇ、
プログラムらしい手段です。どうやるかはいまいちすぐには分かりませんけど…。
ダブルワード(ワード(Integerみたいなの)を、ふたつくっつけて表現する方法)を、
ふたつに分割したり結合したりするサンプルとかに、
結構そういう方法は見かけますねぇ、
今後のためにも、ここはちょっと計算方法を考えてみたらどうでしょうか?
いざとなったらたぶん+-*/の四則演算とかでできると思うので。
http://www.ne.jp/asahi/license/ikawa17/info_kiso/bin.html
折角16進数にできたんだから、1文字づつ拾って
Select Case Mid(strHex,i,1)
Case "0"
strBuf = strBuf & "0000"
Case "1"
strBuf = strBuf & "0001"
.....
Case "F"
strBuf = strBuf & "1111"
とか・・・。
ANDを使ったサンプルです。
Long型から二進文字列へ変換します。
最上位ビット対策はしてませんのであしからず。
Private Sub Command1_Click()
Me.Caption = KMGetBits(&H40000000)
End Sub
Private Function KMGetBits(ByVal HLBit As Long) As String
Dim HLi As Long
Dim HLAndBits As Long
HLAndBits = 1
HLi = 0
Do
If (HLBit And HLAndBits) Then
KMGetBits = "1" & KMGetBits
Else
KMGetBits = "0" & KMGetBits
End If
HLi = HLi + 1
If (HLi >= LenB(HLi) * 8 - 1) Then Exit Do
HLAndBits = HLAndBits * 2&
Loop
End Function
=簡単な解説=
1、Long型は32Bit(最上位は符号に使用されるのでサンプルでは31Bit)
(LenBでバイト数を求め、1Byte = 8Bitなので*8している)
2,AND演算子は2つの値で共にビット立っているもののみを返します。
サンプルではHLAndBitsで指定したビットが立っていれば
同じ箇所のビットが立つので真となるわけです。
3,HLAndBitsは1から31Bitまでの各ビットが単体で立った数値になります。
通常はシフト演算を使いますがVBでは存在しないため、2をかけてます。
できました
皆様ありがとうございます
?
ツイート | ![]() |