VB10進位轉2進位問題

2010-03-11 7:57 am
最近有項作業,想破頭都想不出來!! 請各位幫忙依下 ^^

老師要求的程式是輸入1個整數,和要取第幾個位元

EX: 輸入數字3 10進位轉成2進位法 = 0"1"1
取第2個位元就是1
EX: 輸入數字4 " =10"0"
取締1個位元是0
若輸入負數,需轉呈補數 不知此程式怎麼寫~~ 請幫忙 謝謝
表單:
LABEL1=輸入1個整數 TEXT1=實際輸入數字
LABEL2=要取第幾個位元 TEXT2=實際輸入數字
LABEL3=結果 答案
BUTTON = 執行按鈕 (在裡面打程式)
更新1:

不好意思 LABEL1=輸入1個整數 LABEL2=要取第幾個位元 (這兩格只是改屬性名字,變成中文而已~~無須理會) TEXT1=實際輸入數字 TEXT2=實際輸入數字 (這兩格是真正輸入數字的地方) LABEL3 (這格式顯示出答案的格子) BUTTON = 執行按鈕 (在裡面打程式) 不好意思 再麻煩各位了 記得!! 需要補數 (10進位轉2進位)

更新2:

是從左第1個開始數

回答 (6)

2010-03-15 10:16 am
2010-03-11 5:30 pm
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label3.Text = IIf((Val(TextBox1.Text) And 2 ^ Val(TextBox2.Text - 1)) > 0, 1, 0)
End Sub

2010-03-11 11:51:30 補充:
需要轉換成二進制嗎?可以使用下面的函數:
Private Function ToBinary(ByVal intD As Integer) As Long
Dim strOut As String
Dim intI As Integer
For intI = 0 To 15
strOut = IIf(intD And 2 ^ intI, "1", "0") & strOut
Next
ToBinary = CLng(strOut)
End Function

2010-03-12 09:48:52 補充:
從左第1個開始數 (VB6)

Private Sub Command1_Click()
Dim strBin As String
strBin = ToBinary(Text1.Text)
Label3.Caption = "Number " & Text1.Text & " converted to binary=" & strBin & Chr(10) & "Bit " & Text2.Text & "=" & Mid(strBin, CInt(Text2.Text), 1)
End Sub

2010-03-12 09:48:57 補充:
Private Function ToBinary(ByVal intD As Integer) As String
Dim intI As Integer
For intI = 0 To 15
ToBinary = IIf(intD And 2 ^ intI, "1", "0") & ToBinary
Next
Do While Mid(ToBinary, 1, 1) = "0"
ToBinary = Mid(ToBinary, 2)
Loop
End Function
2010-03-11 4:47 pm
來點夠powerfull

v = 2
For i = 7 To 0 Step -1
Debug.Print IIf((2 ^ i) And v, "1", "0");
Next
2010-03-11 12:15 pm
已經被檢舉了
大概會被移除吧
2010-03-11 9:05 am
想請問一下
取第幾個適從最左邊那個開始往左數

2010-03-11 01:05:03 補充:

Dim result, temp, lookfor, x As String
Dim num As Integer
Private Sub Command1_Click()
result = "":
num = Val(Text1)
If num > 0 Then
Do While num >= 1
result = Str(num Mod 2) & result
num = num \ 2
Loop
Else
num = Mid(num, 2, Len(num))
Do While num >= 1
result = Str(num Mod 2) & result
num = num \ 2
Loop
result = "1" & result
End If
result = Replace(result, " ", "")
If Text2 <> "" Then
If Val(Text2) > Len(result) Then
MsgBox "輸入錯誤!請重新輸入", 64, "錯誤"
Exit Sub
Else
x = StrReverse(result)
lookfor = Mid(x, Val(Text2), 1)
End If
End If
Label3 = "輸入數字" & Text1 & "轉2進位值為=" & result
If Text2 <> "" Then Label3 = Label3 & ",取第" & Text2 & "個數字為" & lookfor
End Sub

照您的寫法寫完了針對您的10進位轉2進位
並且可以數值為負數的話
可以轉為補數(2進位表示)
並且可以選擇要取第幾個(從右邊開始往左數第幾個)

有問題可以在發問唷
謝謝您


2010-03-11 19:19:32 補充:
阿旺大大果然高明!
小的佩服佩服!!

2010-03-11 21:17:40 補充:
那請您將
x=StrReverse(result)這行拿掉
將下面一行改成
lookfor=Mid(result,Val(Text2),1)
即可
有問題可以在發問
謝謝您
參考: 自己, 自己
2010-03-11 8:51 am
好巧啊
前天剛好有人用即時問我一樣的問題,連數字都一樣

想出了一個"土法煉鋼"的方法


'以下為VB6程式碼
 Private Sub Command1_Click()
  For i = 1 To Len(Hex(Text1.Text))
   '將輸入數值轉成16進位後,個別取出給 HTT 轉成2進位
   m = m & HTT(Mid(Hex(Text1.Text), i, 1))
  Next i
  m = StrReverse(m) '反轉字串
  Label3.Caption = Mid(m, Val(Text2.Text), 1) '顯示
 End Sub

 Function HTT(ByVal H As String) '從16進位轉2進位
  Select Case H
   Case "1" : HTT = "0001"
   Case "2" : HTT = "0010"
   Case "3" : HTT = "0011"
   Case "4" : HTT = "0100"
   Case "5" : HTT = "0101"
   Case "6" : HTT = "0110"
   Case "7" : HTT = "0111"
   Case "8" : HTT = "1000"
   Case "9" : HTT = "1001"
   Case "A" : HTT = "1010"
   Case "B" : HTT = "1011"
   Case "C" : HTT = "1100"
   Case "D" : HTT = "1101"
   Case "E" : HTT = "1110"
   Case "F" : HTT = "1111"
  End Select
 End Function
'以上為VB6程式碼



'以下為VB2008程式碼
Public Class Form1

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim m As String = ""
  For i = 1 To Len(Hex(TextBox1.Text))
   '將輸入數值轉成16進位後,個別取出給 HTT 轉成2進位
   m = m & HTT(Mid(Hex(TextBox1.Text), i, 1))
  Next i
  m = StrReverse(m) '反轉字串
  Label3.Text = Mid(m, Val(TextBox2.Text), 1) '顯示
 End Sub

 Function HTT(ByVal H As String) '從16進位轉2進位
  Select Case H
   Case "1" : HTT = "0001"
   Case "2" : HTT = "0010"
   Case "3" : HTT = "0011"
   Case "4" : HTT = "0100"
   Case "5" : HTT = "0101"
   Case "6" : HTT = "0110"
   Case "7" : HTT = "0111"
   Case "8" : HTT = "1000"
   Case "9" : HTT = "1001"
   Case "A" : HTT = "1010"
   Case "B" : HTT = "1011"
   Case "C" : HTT = "1100"
   Case "D" : HTT = "1101"
   Case "E" : HTT = "1110"
   Case "F" : HTT = "1111"
   Case Else : HTT = ""
  End Select
 End Function

End Class
'以上為VB2008程式碼


2010-03-11 18:37:43 補充:
哇!!
ㄚ旺大大果然厲害

用這方法,程式變

v = Text1.Text
i = Text2.Text - 1
Label1.Caption = IIf((2 ^ i) And v, "1", "0")

簡潔有力!!


收錄日期: 2021-04-26 13:13:47
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20100310000015KK09340

檢視 Wayback Machine 備份