当前位置:首页 > 芯闻号 > 充电吧
[导读]  计算机是采用二进制存储的,计算机的二进制编码方式也分为原码,反码,补码方法。这是一个把十进制数字转换到它的二进制原码的算法,希望能给大家一些启发吧!这个算法我是用VB6写的,其中用到了函数递归调用

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

Dim 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 Function

End If

If Abs(iNum) <> iNum Then
   S(iLength) = 1
Else
    S(iLength) = 0
End If

Call ConvertToBinary(Abs(iNum), i)

For j = i + 1 To iLength - 1
    S(j) = 0
    'Debug.Print j, S(j)
Next

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

End 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) & vbCrLf

End Sub

Private Sub Command2_Click()
Text1.Text = Text1.Text & BinaryConvertA(-222, 9) & vbCrLf

End 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 函数进行判断文本中的内容是否为数,具体实现过程就很简单了,在此就不多加解释了。我会在接下来的日子里写出反码和补码的代码,也有可能给出C++版的代码,如果对此有兴趣,请关注我的BLOG!Thank you~


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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

央视《今日说法》栏目近期报道了一名90后程序员通过开发非法视频搬运软件在不到一年的时间里获利超700万,最终获刑的案例。

关键字: 程序员 软件

业内消息,近日美国麦肯锡公司的一份报告强调了芯片行业的劳动力挑战,在美国寻求吸引更多技术工人从事半导体制造之际,许多现有员工正在重新考虑是否要留下来。

关键字: 芯片

业内消息,近日美国商务部工业与安全局(BIS)根据出口管理条例(EAR)将中国电子科技集团旗下多个研究所、中电科芯片技术(集团)有限公司、中国科学技术大学,以及北京量子信息科学研究院、本源量子等 37 个中国实体添加到实...

关键字: 实体清单

5 月 11 日消息,鲲鹏昇腾开发者大会昨日在北京中关村国际创新中心举办,主题为“心怀挚爱,共绽光芒”,会上推出了原生使能计划、启动鲲鹏昇腾科教创新卓越中心、鲲鹏昇腾原生创新汇等。

关键字: 华为 鲲鹏昇腾

近日路透社援引知情人士的消息称,美国商务部正考虑推动一项新的监管措施,将限制 AI 模型的出口,初步计划对 ChatGPT 等大模型采取行动。

关键字: AI

西班牙电信集团Telefónica的德国子公司Telefónica Germany日前与AWS达成一项构建5G核心网的协议。

关键字: 西班牙电信 AWS 诺基亚 5G

面对人工智能(AI),乐观者纷纷用金钱投票。

关键字: AI 亚马逊 Meta 谷歌 微软

上海2024年5月9日 /美通社/ -- 2024年5月6日,国际公认的测试、检验和认证机构SGS通标标准技术服务有限公司(以下简称“SGS”)为上海复旦微电子集团股份有限公司(以下简称“复旦微电子集团”)颁发了ISO...

关键字: ISO 微电子 半导体 TI

慕尼黑2024年5月9日 /美通社/ -- TÜV南德意志集团(以下简称"TÜV南德")持续保障安全、可靠及可持续发展。作为全球化的服务提供商,TÜV南德2023年全年营收达约31亿欧元,首次突破30亿欧元大关,同比增长...

关键字: BSP 可持续发展 数字化 人工智能

韩国大田2024年5月9日 /美通社/ -- 机器人平台专业公司Rainbow Robotics(首席执行官Jungho Lee)将从5月8日起开启移动双臂机器人RB-Y1的预售。

关键字: 移动 双臂机器人 ROBOTICS AI
关闭
关闭