数字电路与系统-数制与编码1
1.日常生活中的计数方式是位置计数法,最常见10进制。位置计数法存在位权的概念,位权就是改进制数的幂,在进行数制转化时相当重要;同时,每一位数的
位置非常重要,决定了位权的次幂,位置有正数位,0位,负数位。
2.随着社会的发展,人们采用数字对一些信息进行编码,二进制的基数少,只有0-1,非常适合用来作为编码的工具,同时,电路可完全可以模拟二进制的运算。这
就是二进制在计算机中运用的原因,但是,二进制在表达大的数字时,占据的位较多,这样就出现了8,16进制的简化表达,但最后还是要进行进制转化,化为二进制。
3.进制间的转化
二进制化十进制,注意每一位的位权,存在一个0位,不能将次幂弄错。
十进制化二进制,正数位是除2逆序排列,小数位是乘2正序排列。
我设置了(7146)8这个数,想进行八进制和二进制之间的转化,开始时,对7146直接不断地除2,逆序排列,和将四位数字7,1,4,6 用三位二进制来表示,对不上
正确地算法是将八进制的7146先化为十进制,再直接除2, 错误的原因在于7146是八进制,直接除2是不对的。
4.原码,反码和补码
存在五个概念,机器数,真值,原码,反码和补码。
机器数:生活中的数字在计算机中的表示,是符号数在机器中的表示方法,因为正常的数有正有负。定义为二进制数的第一位代表符号,0为正数,1为负数。如:计算
机为8位字长,-3的机器数为10000011。
机器数是一种人为的编码方法,可以将正负整数录入计算机,但存在一个问题。依据二进制数转化为十进制的方法,10000011的值是131,并非实际值-3,所以在机器数
之外又定义了机器数的真值,10000011的真值为-0000011,真值是直接将符号位还原为符号,剩余的二进制数按正常的转化的方法转化。
我们要明白上述的概念均为计算机为了存储数字而设计出来的一系列的编码方式,没有对错,只有合不合适。
在此还要强调一点机器数有许多种,只要是符号数的编码方式,那就算是机器数。所以真值也是机器数的一种。
5.原码作为一种对符号数的编码方式是简单明了的,但是如果用原码来进行运算,那就出错了。包括本身的进制转化都是错误的,这点要注意。
原码顾名思义已经是一种码了,它是否能等于符号数这是不确定的,但是真值一定等于符号数。
补充说明:等比数列的求和公式,通用公式为a1(1-qn)/1-q 式子中q不为1. 运用到二进制上n位的位权展开,是2n-1=20+21+.....+2n-1 这是以整数二进制展开的
比如八位二进制01111111的位权展开式为20+21+....+26=27-1=127 总共七项。八位二进制原码的取值范围是11111111-01111111=-127~127
6.从最初我们接触二进制以来,按位权展开的是真值,随后计算机输入的是机器数(原码),计算机要输入正反数,所以原码必须有符号位,但是其已不能用位权展开的形式
来将原码展开了,在原码的基础上,又发展了反码,补码。无论各种教科书怎么讲解,有一点是无法摆脱的,那就是,为什么正数的反码和补码仍是其本身,和负数的规则
完全不一样?可能本质上还是要回归到这几种码制诞生的目的是为了计算机运算,存储,深入理解计算机后估计才能解答这个问题。https://www.zhihu.com/question/23172611 这个链接解释了反码和补码的另一个名称,对1求反和对2求反。
7.计算机是一个非智能的机器,人们能通过自己构建的符号数的编码方式反码来清楚地知道其真值是多少。但是,计算机根本无法判别一个数的正负,大小,其内部运行的都是
补码。代数上所进行的加减乘除,在计算机内部仅仅是相加和移位。这点是可以理解的,如果用反码直接进行运算,得出的结果完全是不对的,包括反码自己本身的位权展开都是不对的,本质在于其含有的符号位。但是发展了补码之后,可以将补码直接用于计算机的运算,重要的一点就是补码的符号位可带入运算。
8.补码的初步理解:所有的运算始终要考虑一点,有超出容量(模)的可能性。如果运算后超出了模,发生了溢出,那实际上进入了第二次循环,如果有仪器接受这个模的话,
那直接记录超出部分的数字即可。补码的来源实际上是为了计算机逻辑电路的简化,加法的电路和减法的电路完全不一样,如果真的是进行减法运算的电路,利用补码的一个
特性,减法等于加上一个负数,本来计算机加的全是正数,现在突然冒出一个负数要加,让计算机很难做啊。因此怎样避免呢,A+负数和A+(负数关于模的补码)的结果是
一样的,挖去溢出的模,我估计最终的结果要对溢出的模进行处理,这不管它,关键是我们运用补码的概念成功的解决了计算机电路的简化问题。所以说到底,补码的存在就是为了负数定义的,至于为什么把正数带上,纯粹是为了定义的扩大和完整性,非要把符号数全包括进去。
http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html这篇博客也讲述了关于码制的概念。