zoukankan      html  css  js  c++  java
  • 数据的表示(二)——进制

    司空见惯的十进制:

       大数据构想:

        不管是int类型还是long类型都有自己的数据范围,如果超出这个范围数据就会出错(如过大变为负数),因此需要设计一个能处理大整数的类。

        我们很容易想到用数组来表示大整数的各位,由于数组元素的多少只受计算机内存的限制,因此,就可以处理任意长度的大整数了。只受

        这个数组只是大整数的一个表现形式,要处理大整数,还需要记录数据的正负、加减时的进位等。定义如下操作:

        加法》将整数从个位开始进行累加,累加时还需判断是否要进位(逢十进一),因此在累加时还需要将进位数进行累加。

        减法》将整数从个位开始进行减法操作,若不够减还需要从前一位借位(借一当十)。被减数在进行减法操作时还需要减去被节前的位

        乘法》可将乘数中的每一个数组元素与被乘数相乘,然后将结果累加

        除法》除法比较麻烦,首先要考虑试商的问题,从被除数的高位开始与除数对齐,试商时用被除数的部分减去除数,判断能减几次,就可商几,另外还需要考虑余数的问题

       (有幸的是在微软的.NET Framework 4(以及JAVA的JDK 1.5)中已经提供了一个大数据类型,可以处理任意长度的大整数)

        

    为啥要用二进制:

        人脑对很多事物都形成了条件反射,如10和9的大小一眼就能看出,但要比较99999999999和10000000000的大小,要一眼看出就不大可能了

        但计算机却不一样,对于任何操作,电脑都要经过运算,得出结果,不管是10和9还是9999999999和10000000000相比,电脑都会严格按算法运算

        

        我们知道电脑中使用二进制来保存数据和编写程序,为什么要选二进制而不选我们人类熟悉的十进制呢?

        如果要让电脑使用十进制,首先,应该能让电脑识别出十进制的10个数字,怎么识别呢?通常考虑,可以通过元器件中电压的高低水平来分别10个数字

        假如最高电压为12V,那么10个数字中,每个数码可以分配的电压区间为1.33V,而每个数之间的电压间隔越小,外界干扰影响就越大,另外在硬件上要识别这10种状态,其电路结构将非常复杂

        而使用二进制就电路就很简单了,因为具有两种稳定状态的元件(如晶体管的导通截止,继电器的接通断开,电脉冲电平的高低等)很容易被找到

        因此二进制有如下优点:

          1>技术实现简单。电脑由逻辑电路组成,逻辑电路通常只有两种状态,开关的接通和断开,这两种状态正好可以用1和0表示

          2>运算规则简单。两个二进制的和、积运算组合分别有3种规则,相比十进制81种,有利于简化计算机内部结构,提高运算速度

          3>适合逻辑运算。逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数的“真”和“假”相吻合

          4>易于进行转换。二进制数与十进制数、八进制数、十六进制之间的转换很方便

          5>抗干扰能力强。用二进制表示数据具有抗干扰能力强,可靠性高等优点。

      

    其它常见进制表示(此处不详细介绍):

       八进制(神奇的八卦):0,1,2,3,4,5,6,7

       十二进制(钟表的十二):0,1,2,3,4,5,6,7,8,9,A,B

       十六进制(半斤八两):0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

       六十进制(60年一个甲子)

       

    补充—进制间小数的转换

        小数的转换我们采用乘r取整法:

        如193.12转换为八进制,

        (193)D可换为(301)O

        而0.12则有,

        0.12×8=0.96    ------0

        0.96×8=7.68    ------7

        0.68×8=5.44    ------5

        <以此类推直到没有小数>

        因此(193.12)D ≈(301.075)O

    补充—进制的字母表示

        二进制  B   Binary
        八进制  O   Octal
        十进制  D   Decimal
        十六进制  H   Hexadecimal

        

          

  • 相关阅读:
    二叉树(链表形式)
    判断一个非空单链表是否是递增有序的
    指针的异或运算可用于交换两个变量的值
    JavaScript导论
    JavaScript语言的历史
    分享一个分页控件的实现思路
    MVC还是MVVM?或许VMVC更适合WinForm客户端
    基于NPOI的Excel数据导入
    一段用于地址清洗的代码
    模块3之手机号码格式的校验
  • 原文地址:https://www.cnblogs.com/yimengxianzhi/p/7900754.html
Copyright © 2011-2022 走看看