计算机是采用二进制存储的,计算机的二进制编码方式也分为原码,反码,补码方法。这是一个把十进制数字转换到它的二进制原码的算法,希望能给大家一些启发吧!这个算法我是用VB6写的,其中用到了函数递归调用和函数可选参数(个人感觉功能和C++中的函数重载差不多)。
--------------------------------------------------------------------------------

Option Explicit
Option Base 1Dim S() As String * 1, i As Integer
Public Function BinaryConvertA(ByVal iNum As Integer, Optional ByVal iLength As Integer = 8) As String
'//***************************************  Design By 0412Rainbow **********************************************//
'功能:用于将一个二进制数转换为二进制原码,计算思想是除二取余,iNum为所要转换的十进制数,iLength为机器字长(即二进制数
'     的位数),可选,默认传递8,iNum的转换范围-2^(n-1) 到 +2^(n-1),返回值为二进制的字符串形式.
'说明:本算法可以很容易的转换成除R取余,只要在函数中加个参数即可.另原码简介(引自程序员教程):设机器字长为n(即采用n个
'     二进制位表示数据),则最高位是符号位,0表示正号,1表示负号;其余的n-1位表示数值的绝对值。
'函数调用 二进制原码 = BinaryConvertA(十进制数,二进制字长)
'//*******************************************************************************************************************//ReDim S(iLength) As String * 1
Dim sResult As String: i = 1: Dim j As Integer
If Abs(iNum) > 2 ^ (iLength - 1) Then
    MsgBox "十进制数表示溢出", , "进制转换算法"
    Exit Function
End If'修正当十进制数为0的bug,但只处理了+0的问题,并没有特殊处理-0的问题,最好在调用函数之前进行一个判断
If CStr(iNum) = "0" Then
    For j = 1 To iLength
        sResult = sResult & 0
    Next
    BinaryConvertA = sResult: Exit FunctionEnd If
If Abs(iNum) <> iNum Then
   S(iLength) = 1
Else
    S(iLength) = 0
End IfCall ConvertToBinary(Abs(iNum), i)
For j = i + 1 To iLength - 1
    S(j) = 0
    'Debug.Print j, S(j)
NextFor i = iLength To 1 Step -1
    sResult = sResult & S(i)
    'Debug.Print sResult
Next
BinaryConvertA = sResultEnd Function
Private Sub ConvertToBinary(ByVal iNums As Integer, ByVal iCount As Integer)
If iNums <> 1 Then
   S(i) = iNums Mod 2
   Debug.Print i, S(i)
   i = i + 1
   Call ConvertToBinary(iNums / 2, i)
Else
   S(i) = 1
   
End If
End Sub--------------------------------------------------------------------------------
函数调用范例:新建一个工程,添加一个模块,将上面的代码复制到模块中,在窗体中添加一个textbox,三个command控件,自己调整位置。
然后将下面的代码复制到窗体的代码页中.
Private Sub Command1_Click()
Text1.Text = Text1.Text & BinaryConvertA(111) & vbCrLfEnd Sub
Private Sub Command2_Click()
Text1.Text = Text1.Text & BinaryConvertA(-222, 9) & vbCrLfEnd Sub
Private Sub Command3_Click()
Text1.Text = ""End Sub
Private Sub Form_Load()
Text1.Text = ""
Command1.Caption = "第一种调用方式"
Command2.Caption = "第二种调用方式"
Command3.Caption = "&clear"
End Sub---------------------

-----------------------------------------------------------

这样就实现了函数的调用,需要说的还有,我没有在函数中添加对调用参数类型的判断,这个判断应该加到调用函数前,比如说,如果你调用的参数来自一个文本框的文本。那么,你在调用函数前要先判断文本是否可以转换到一个integer类型的整数(cInt函数),可以采用IsNumeric 函数进行判断文本中的内容是否为数,具体实现过程就很简单了,在此就不多加解释了。我会在接下来的日子里写出反码和补码的代码