0412Rainbow的专栏

没写的代码永远都不会又Bug

十进制转换二进制(反码)

  这是段把十进制数转换为二进制反码的VB6代码,这段代码需要转换为原码函数(BinaryConvertA)的支持,开始的时候,我把它写成一个了独立的函数,但最后还是改到了现在这个样子,感觉如果转换原码代码部分有错误,可以把错误的代码改了就可以了,这样的代码逻辑性更好,也容易维护,出现代码不同步的可能性低,降低了代码的调试难度。同时,发现了在原码转换中的一个BUG,就是当十进制数为0的时候,我已经对前一篇文章进行了修改,但关于+0和-0的问题,还是没有处理好。我是写了一个都处理的版本,但因为传递的是数字,所以VB是不传符号的,所以-0传过去也会被当成+0处理。所以如果要在函数内完成,就必须传字符串,但函数内有数的比较运算,如果传字符串,就必须在函数中将字符串转成integer,比较麻烦(也增加了些不必要的运算,因为很多时候并不是-0,但却必须要进行cint(inum)运算),所以,我想把判断放在调用函数前会比较好!下面就是十进制转换到二进制反码的代码:


Public Function BinaryConvertB(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),返回值为二进制的字符串形式.
'说明:反码简介(引自程序员教程):设机器字长为n,则最高位是符号位,0表示正号,1表示负号;正数的反码与原码相同,负数的反码
'     则是其绝对值按位取反。
'函数调用 二进制反码 = BinaryConvertB(十进制数,二进制字长)
'//**************************************************************************************************************//
ReDim S(iLength) As String * 1
Dim sResult As String, tempResult As String, j As Integer
tempResult = BinaryConvertA(iNum, iLength)
For j = 1 To iLength
    S(j) = Mid(tempResult, iLength - j + 1, 1)
   
Next

If Abs(iNum) <> iNum Then
    For j = 1 To iLength - 1
        If S(j) = 0 Then
            S(j) = 1
        Else
            S(j) = 0
        End If
    Next
   
End If


For i = iLength To 1 Step -1
    sResult = sResult & S(i)
    'Debug.Print sResult
Next
BinaryConvertB = sResult


End Function


函数调用举例只要参见转换原码的示例就好了.

阅读更多
个人分类: 算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

十进制转换二进制(反码)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭