数据的表示(二)——进制

司空见惯的十进制:

   大数据构想:

    不管是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

    

      

原文地址:https://www.cnblogs.com/yimengxianzhi/p/7900754.html