01 数制与码制

数字电子技术基础——数制与码制

一、二进制及其转换

二进制,是在数学和数字电路中以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0和1来表示 。

1.整数的 X进制-二进制 转换:

十转二:

X转十:

  • 难点1:带有小数的二进制数转十进制:

    (101.11)2=1×22+0×21+1×20+1×21+1×22=(5.75)10(101.11)_2=1\times2^2+0\times2^1+1\times2^0+1\times2^{-1}+1\times2^{-2}=(5.75)_{10}

  • 难点2:带有小数的十进制数转二进制:

    分别计算整数和小数部分:

    • 整数部分按照上述方法计算

    • 小数部分:将原数字乘2,取其整数部分;小数部分乘2,取其整数部分;如此循环直到小数部分不存在为止。最后将每一轮所取得的整数部分顺序排列

2. 十六、八进制与二进制的转化

二进制四位一组对应十六进制一位,二进制三位一组对应八进制一位,不足补齐前导0

二、二进制的朴素的乘除运算

二进制乘法:正常乘就行

二进制除法:“减”-“右移”-“减”-“右移”-“减”-“右移”-“减”-“右移”-“减”循环

三、利用补码实现二进制数加减法

原码:带符号的二进制数

反码:原码除了符号位之外取反得到,记为(N)INV(N)_{INV}

补码:补码=模数+真值(超出模数则舍弃一个模数)。

用补码相加代替减法运算使得避开比较环节,记为(N)COMP(N)_{COMP}

例子:5是-7对模12的原码

  • 难点4:原码和补码间的转换方式

原码转换为补码(将实际数值转换为补码以便在计算机中表示):

  1. 如果原码表示的是一个正数补码=原码
  2. 如果原码表示的是一个负数,补码=原码除符号位取反+1

补码转换为原码(从补码得到实际数值):

  1. 如果补码的最高位(符号位)是0,那么它表示的是一个正数,原码就是补码本身。
  2. 如果补码的最高位是1,那么它表示的是一个负数,原码=补码除符号位取反+1
  • 难点5:进位溢出到符号位的处理方式:添加位数

    例:用补码方式计算-13+10

    13和10都可以用4位二进制数表示,加上一位符号位,考虑结果超过16可能性(后面算-13-10的时候会有,用5位试试看就知道会出问题),此处采用六位二进制数字表示

    其中-13的原码为1-01101,10的原码为0-01010

由此可以得到二者的补码:

其中 -13的补码为1-10011,10的原码为0-01010(注意10是正数,补码等于本身)

补码相加:(在相加过程中符号位参与运算,出现符号进位的情况后面再说)

13110011   10001010  3111101-13\quad1-10011\\ \ \ \ 10\quad0-01010\\ ------------\\ \ \ -3\quad1-11101

注意此处得到的是-3的补码,要翻译回原码,由于第一项为符号位,为1,则对后面的取反+1,得到1-00011,即为-3的原码。

13  11001110  11011023(1)  111101-13\quad\quad\ \ 1-10011\\ -10\quad\quad\ \ 1-10110\\ ------------\\ -23\quad(1)\ \ 1-11101

注意!!!:二进制补码相加的时候,和的符号位等于两数符号位与来自最高位的进位相加的结果,而舍弃产生的进位。

以下为这句话的解释:

在二进制相加中,如果两个位相加的结果超过了当前位的表示范围,就会产生进位。对于补码相加,进位被舍弃,不参与最终结果的计算。这是因为补码的表示范围是固定的,超过该范围的进位部分将被忽略,以保持结果的正确性。

所以如果已经能够确定结果的范围,算出来的就一定是正确的了。只是其内部在取模,回环往复达到结果而已。

拓展:正溢出,负溢出与变形补码

变形补码就是多一个符号位,原来的0变00,11变11。

对加法而言,正负相加显然是不会溢出的。

那么对于正正相加,符号位为00、00,发生溢出时是上溢,应该会有进位到符号位上,会变成01。

而对于负负相加,符号位为11、11,此时两个数为22(n+1)+x2*2^(n+1)+x, 22(n+1)+y2*2^(n+1)+y, 因为x和y都是负数,两个相加结果会小于42(n+1)4*2^(n+1),不溢出的时候高两位表示的应该是32(n+1)3*2^(n+1),所以是11,而溢出的时候,x+y<2n+1x+y<-2*(n+1),高两位表示的应该是22(n+1)2*2^(n+1),对应10。

所以"00"、 “01”分别表示正数、正溢出(上溢),“11”、“10”表示负数、负溢出(下溢)。

四、码制

(一)等长编码

  1. 8421码
  • 难点6:8421码(BCD码)

    用四位二进制数对位表示十进制数,没有权值,是等长编码

    例如:38

    3: 0011

    8: 1000

    所以38:001110008421BCD(0011 1000)_{8421BCD码}

  1. 格雷码

    最大特点:相邻代码只有一位改变状态。

    应用:路由器

(二)变长编码

  1. 哈夫曼编码

    基于各个字母出现的频率进行不同长度的编码,出现频率小,编码长,表示不常用。适用于字典。