求補碼的代碼如下:
Dim a(16) As Integer, x As Integer
x = CInt(Text1.Text)
If x >= 0 Then a(16) = 0 Else a(16) = 1
x = Abs(x)
For i = 1 To 15
a(i) = x Mod 2
x = x \ 2
Text2.Text = ""
Next i
For i = 16 To 1 Step -1
Next i
For i = 1 To 15
a(i) = 1 - a(i)
Next i
Text2.Text = a(16)
For i = 15 To 1 Step -1
Next i
Text2.Text = a(16)
a(1) = a(1) + 1
i = 1
While a(i) = 2 And i < 15
a(i) = 0
a(i + 1) = a(i + 1) + 1
i = i + 1
Wend
For i = 15 To 1 Step -1
Text2.Text = Text2.Text & a(i)
Next i
但是VB好像沒有符號位取反的運算子,想問大佬們如何解決
uj5u.com熱心網友回復:
Option Explicit
Private Sub Command1_Click()
Dim x As Integer, y As Integer
x = CInt(Text1.Text)
Debug.Print "原碼:", x, Right("0000" & Hex(x), 4), DEC2Bin(x)
'反碼:除符號位以外,各位取反
y = (x And &H8000) Or (Not x)
Debug.Print "反碼:", y, Right("0000" & Hex(y), 4), DEC2Bin(y)
'補碼:除符號位以外,各位取反,末位加一
y = (x And &H8000) Or ((Not x) + 1)
Debug.Print "補碼:", y, Right("0000" & Hex(y), 4), DEC2Bin(y)
'移碼對補碼符號位取反
y = (Not (x And &H8000)) And ((Not x) + 1)
Debug.Print "移碼:", y, Right("0000" & Hex(y), 4), DEC2Bin(y)
Debug.Print
End Sub
Private Function DEC2Bin(intX As Integer) As String
Dim strHex As String
Dim i As Integer
strHex = Right("0000" & Hex(intX), 4)
For i = 1 To 4
Select Case Mid(strHex, i, 1)
Case "0"
DEC2Bin = DEC2Bin & "0000"
Case "1"
DEC2Bin = DEC2Bin & "0001"
Case "2"
DEC2Bin = DEC2Bin & "0010"
Case "3"
DEC2Bin = DEC2Bin & "0011"
Case "4"
DEC2Bin = DEC2Bin & "0100"
Case "5"
DEC2Bin = DEC2Bin & "0101"
Case "6"
DEC2Bin = DEC2Bin & "0110"
Case "7"
DEC2Bin = DEC2Bin & "0111"
Case "8"
DEC2Bin = DEC2Bin & "1000"
Case "9"
DEC2Bin = DEC2Bin & "1001"
Case "A"
DEC2Bin = DEC2Bin & "1010"
Case "B"
DEC2Bin = DEC2Bin & "1011"
Case "C"
DEC2Bin = DEC2Bin & "1100"
Case "D"
DEC2Bin = DEC2Bin & "1101"
Case "E"
DEC2Bin = DEC2Bin & "1110"
Case "F"
DEC2Bin = DEC2Bin & "1111"
End Select
Next
End Function
兩個案例輸出:
原碼: 123 007B 0000000001111011
反碼: -124 FF84 1111111110000100
補碼: -123 FF85 1111111110000101
移碼: -123 FF85 1111111110000101
原碼: -123 FF85 1111111110000101
反碼: -32646 807A 1000000001111010
補碼: -32645 807B 1000000001111011
移碼: 123 007B 0000000001111011
uj5u.com熱心網友回復:
首先,VB是有取反的運算子的,NOT 就是取反運算子,還有,你是想要以下這種運算效果嗎
Dim int_temp As Integer
Dim int_temp2 As Integer
int_temp = int(Text1.Text)
int_temp2 = int_temp And &H8000
int_temp = Not int_temp
int_temp = int_temp And &H7FFF
int_temp = int_temp + 1
If int_temp2 <> 0 Then
int_temp = int_temp Xor &H8000
End If
Text2.Text = int_temp
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/30198.html
標籤:VB基礎類
上一篇:求助帖(vb控制元件陣列)
下一篇:VB萌新求解救
