十进制转换二进制(原码) 收藏
  计算机是采用二进制存储的,计算机的二进制编码方式也分为原码,反码,补码方法。这是一个把十进制数字转换到它的二进制原码的算法,希望能给大家一些启发吧!这个算法我是用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~

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/0412Rainbow/archive/2005/05/03/371574.aspx

十进制转换二进制(原码)相关推荐

  1. python二进制反码例题_python中的进制转换和原码,反码,补码

    python中的进制转换和原码,反码,补码 计算机文件大小单位 b = bit 位(比特) B = Byte 字节 1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b 1KB ...

  2. 十进制数的原码 c语言,C语言程序设计第1章节(zmy).ppt

    C语言程序设计第1章节(zmy).ppt 张茂元 副教授, 硕士生导师, 博士后 华中科技大学计算机学院 2007年2月;C语言程序设计-第1章 概论;1.1 学习C语言程序设计的第一个例子 ;例1. ...

  3. 二进制原码补码反码运算规则

    1. 二进制最高位是符号位:0正1负 2. 对于正数,负数和零 正数:三码一样 负数: 反码 = 原码符号位不变,其他位取反 补码 = 反码+1 反码 = 补码-1 零:三码都是零 3. 计算机在内部 ...

  4. c语言实现补码(负数)转换成原码

    1.基础知识 (1)负数在计算机中是以补码的形式存储的: (2)有符号数的最高位为1表示为负数,为0表示正数: (3)反码:等于原码除过符号位,其余位取反: (4)补码:等于反码加1. 2.以-62为 ...

  5. 二进制原码通过异或运算转化为格雷码的方法

    异或转换 二进制码→格雷码(编码): 在二进制原码的最高位前补一个0最后再去掉(正常人的书写方法下就是最左边补一个0)(这个操作的最终结果实际上就是让原码最高位保持原样),然后再从最低位开始,和前一个 ...

  6. 二进制 原码 反码 补码

    1.原码,反码和补码概念 正数:原码.反码.补码相同: 以123为例: 原码:01111011 反码:01111011 补码:01111011 负数的原码:为取绝对值的数转二进制,然后符号位加一: 负 ...

  7. c语言 补码转原码,C语言编程之二进制原码、反码和补码

    概述 在计算机内,有符号数有3种表示法:原码.反码和补码. 在计算机中,数据是以补码的形式存储的,所以补码在c语言的教学中有比较重要的地位,而讲解补码必须涉及到原码.反码. 详细释义 所谓原码就是二进 ...

  8. 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...

    C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...

  9. c语言位运算八进制转二进制,C语言十进制转换二进制八,十六进制。二进制转十进制。...

    C语言十进制转换二进制八,十六进制. 十进制转二进制有个计算公式,就是除以2取余再倒序显示余数就是了.可以根据公式写.八制进公式也同理.十六进制有点不一样,大于9的要转为字母.A,B,C,D,E,F. ...

最新文章

  1. 软件测试用python一般用来做什么-月薪20K的软件测试岗,为什么要求我会Python?...
  2. javascript高精度计算解决方案
  3. QString之arg用法
  4. 做ppt用的小插图_如何用PPT做随机抽奖?
  5. DBA 14条职业选择路线,你适合哪种?
  6. 三年级计算机教案 渔舟唱晚,《渔舟唱晚》大班教案
  7. Hxro将采用Solana作为第一层区块链,并过渡为完全去中心化的链上衍生品网络
  8. bzoj 3412: [Usaco2009 Dec]Music Notes乐谱
  9. Python 代码练习
  10. 九联UNT401H零配置、芒果、南传、百视通等版本通刷固件及教程
  11. IntelliJ IDEA for mac汉化
  12. winVNC 源代码分析
  13. 【MATLAB】调整坐标轴及视野
  14. Google Adsense api 推荐介绍 ~!没有网站照样赚钱!
  15. java 同步和异步
  16. 解决typora beta版本过期提示
  17. Matlab 计算显色指数(Ra,R1-R15)、CCT、duv、Lux、XYZ三刺激值、CIE1931x、CIE1931y
  18. python笛卡尔_Python 计算笛卡尔积
  19. Python:统计文件中所有英文单词的数量
  20. NOIP2005过河(青蛙过河)

热门文章

  1. js把word转html在线预览,js实现word转换为html
  2. java定义时间格式大全_Java时间格式转换大全
  3. securecrt是什么工具_网络总出故障,这几款工具你掌握了没?!!
  4. 自动化监控--zabbix中的template(模板)详解
  5. 获取C#中方法的执行时间及其代码注入
  6. 以太坊开发 发行代币的增发功能 并实现转到钱包 和买卖的功能
  7. 在Docker中体验数据库之MySql
  8. 【转】Odoo装饰器: one装饰
  9. ArcGIS API for JavaScript 4.4学习笔记[新] AJS4.4和AJS3.21新特性
  10. Microstation研发