10進数を16、2進数に変換するには?

解決


RAY  2002-06-16 16:29:08  No: 104390

どうも,こんにちは
初めて書き込みます
今後ともよろしくお願いしま〜す

え〜と,今ちょっと計算機を作っているんですが
その計算機に16と2進数に変える機能を付けたいんです
つまり,計算後の答えを3つのテキストボックスに入れそれを変換したいんです

どうすればいいでしょうか?
ちなみにVBはまだ本を見ないと書けないくらい初心者です。(^^;


たかみちえ  URL  2002-06-16 17:28:39  No: 104391

16進数にはHexという関数があるので、それを使います。
  2進数は自分で計算してください^^;


とらきち  2002-06-16 20:49:38  No: 104392

2進数ですが、よく数学の本に2で割っていって
余りをうしろから拾っていくという方法が載ってます。

(念のため何をやっているか書いておくと
2で割れたら1の位(2の0乗)に1がたって
その商をまた2で割れたら2の位に(2の1乗)に1が・・・
というような感じです。)

他にもっとよい方法があるかもしれませんが
何も思いつかなければこれを実装してはどうでしょう?


とらきち  2002-06-16 20:53:45  No: 104393

すいません、括弧の中の説明間違えました。
正確には割って余ったらです。


こころ  URL  2002-06-17 02:07:53  No: 104394

プログラムならANDをとればいいのではないでしょうか。
ANDの対象を毎回*2すれば順番にビットがとれるし。


RAY  2002-06-19 03:35:47  No: 104395

皆様ありがとうございました
おかげで16は解決しました!しかし・・・・
2が・・・
すいませんが皆様私はとてもレベルが低いです
計算機で使うnum関数さえ最近覚えたばかりです
なので少し詳しく書いていただきたいのですが,

わがままいって本当にすいませんでした!


たかみちえ  URL  2002-06-19 04:40:31  No: 104396

とらきちさんの言う計算は、一般的な手段です。
分からなければ身近な"数学に詳しい人"に聞けばわかるかな・・・。
(プログラム専用のやり方というわけではないので、知ってる人なら知ってると思います)

  こころさんの言う通り、Andとかを使うのもいいですねぇ、
プログラムらしい手段です。どうやるかはいまいちすぐには分かりませんけど…。
ダブルワード(ワード(Integerみたいなの)を、ふたつくっつけて表現する方法)を、
ふたつに分割したり結合したりするサンプルとかに、
結構そういう方法は見かけますねぇ、

  今後のためにも、ここはちょっと計算方法を考えてみたらどうでしょうか?
いざとなったらたぶん+-*/の四則演算とかでできると思うので。
http://www.ne.jp/asahi/license/ikawa17/info_kiso/bin.html


Say  2002-06-19 05:28:53  No: 104397

折角16進数にできたんだから、1文字づつ拾って
Select Case Mid(strHex,i,1)
    Case "0" 
        strBuf = strBuf & "0000"
    Case "1" 
        strBuf = strBuf & "0001"
        .....
    Case "F" 
        strBuf = strBuf & "1111"
とか・・・。


こころ  URL  2002-06-19 08:28:28  No: 104398

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をかけてます。


RAY  2002-07-18 08:35:37  No: 104399

できました
皆様ありがとうございます


sue  2004-02-04 00:11:24  No: 104400

?


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

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






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