CS207 Chapter 1

Chapter 1 二进制数 Binary Numbers

二进制数 Binary Numbers

数字系统 Digital Systems

  • 所有的计算都有一个特殊用途的数字计算机嵌入,数字系统可以代表/操纵离散的信息,例如10进制信号,26个字母。数字(Digit)=>数字信号(Digital)(计算机,系统 等)
  • 在数字系统中,输入是由开关进行的,通常含有以下两种离散值,高电位(HIGH),低电位(LOW),这种信号被称为数字信号,设备内的电路被称为数字电路。

进制 Number System

  • 有几种我们通常使用的进制。

    • 十进制:0,1,2,…,9。

    • 二进制:0,1。

    • 八进制:0,1,2,…,7。

    • 十六进制:0,1,2,…,9,A,B,…,F。

  • 在十进制系统中,我们有10个不同的数字,但在二进制系统中只有两个。二进制数字系统更容易被处理。在数字世界中,我们用二进制思考问题,一盏灯要么关要么开。…而我们用两个数字来表达一切:0和1。一个十进制的$25_{10}$在二进制中变成$11001_{2}$。

进制转换 Conversion between binary and hexadecimal

  • 需要将m进制转换为n进制,则先将m进制转换为十进制,再转换为n进制,十进制是关键。

  • 任何$X$进制的数字,小数点左边n个数字,右边m个数字可以被展开为十进制:

    $(a_na_{n-1}…a_2a_1b_1b_2…b_m)_X$

    $(a_nX^{n-1}+a_{n-1}X^{n-2}+…+a_1X^0+b_{1}X^{-1}+b_2X^{-2}+…+b_mX^{-m})$

  • 十进制转别的进制:

    • 整数部分:除法,取余,重复
    • 小数部分:乘进制数,取整数位,重复
  • 二进制转八进制:每三位分割转化为十进制数。

  • 二进制转十六进制:每四位分割转化为十进制数。

补码和反码 Complements

反码 diminished radix complemen $r-1’s$

  • 对于r进制数字的补码,用r-1减去每一位,例如$12345_{10}$,反码为$99999 - 12345 = 87654$

补码 radix complement $r’s$

  • 先计算反码,然后加1 ,例如$12345_{10}$,补码为$99999-12345+1 = 87655$

二进制减法

  • 三个方法:借位法,反码法,补码法

补码法

如要计算$M-N$:

  • 如果$M\geq N$:

​ 把N的补码加到M上然后去掉进位。例如$72532-3250$:

​ $M=72532, N_补=96750, M+N_补=169282, 减去进位169282-100000=69282$

  • 如果$M<N$:

​ 把N的补码加到M上然后取补码加负号。例如$3250-72532$:

​ $M=03250, N_补=27468, M+N_补=30718, 取补码69282, 加负号结果为-69282$

带符号的二进制数 Signed binary numbers

​ 生活中有很多场景会用到正数负数,但数字系统用二进制去代表一切,所有有三种表示方法:符号表示、反码(1’s)表示,补码(2’s)表示

符号表示 Sign-magnitude representation

​ 通常多一个bit叫做sign bit,简称MSB。

  • 通常来讲,0作为正号,1作为负号
  • 例如一个8-bit带符号二进制数字$01101001_2$代表一个正数$105_{10}$,$11101001_2$代表一个负数$-105_{10}$。

反码和补码表示 $1’s$ and $2’s$ complement representation

  • 反码表示,两个数字都是彼此的反码例如$0111_2$代表$+7_{10}$,$1000_2$代表$-7_{10}$,正数MSB为0,负数MSB为1
  • 补码表示,1被加到反码表示法中$0111_2$代表$+7_{10}$,$1001_2$代表$-7_{10}$,正数MSB为0,负数MSB为1

二进制编码 Binary codes

​ 只有在知道数据所用的编码时候,才有可能对数据进行解释。例如1000010在直二进制中表示66(十进制),在BCD中表示42(十进制),在ASCII代码中表示字母B。

二进制编码的十进制(8421) Binary-Coded decimal (BCD)

​ 简称BCD,用4bit来编码每个10进制数字,在数字系统中很方便使用。例如$35_{10}$使用$0011$ $0101$来表示,而不是$100011_2$。同时它也被称为8421编码,因为这是BCD编码中4个bit分别的权重。例如用BCD编码表示69.27: $ 69.27_{10}=01101001.00100111_{BCD} $

BCD加减法 BCD addition & subtraction

  • 先用一般法则将两数相加/减,如果得出小于9则会产生一个合理的的BCD数字
  • 如果产生了大于9的数字则会产生进位,这是不合理的,此时在加上十进制的$6_{10}$或二进制下的$0110_{2}$来跳过6个不合理的数,然后把进位放到下一组4bit数中(可以是已经存在的,也可以是新的一组)
  • 例如:$0111_{BCD} + 1001_{BCD}$:$0111+1001=10000,$ $10000+0110=00010110_{BCD}$

格雷码 Gray code

  • 两位数字之间只有一位发生了变化

检错码 Error-detction codes

  • 二进制信息在介质中传导时会有所损失或噪音,检错码就是用于检验传输过程中的错误码。错误不可以被更正,它的目的是检测
  • 奇偶检验位:数据中1是奇数就是1,反之是0,使数据中的1的个数始终为奇数

检和 Checksum

  • 奇偶检验会在双数错误时失效,因此我们使用Checksum。在传输一串数据A之后又传输了B,那么会有一个Check Sum为A与B的二进制数据相加,如果又传输了C,则加上C的二进制数据。在数据传输完成后传输Check Sum,在接收端完成同样的操作,如果接收端的Check Sum和发射端的最后一个Check Sum相同,则数据无错

ASCII

​ 许多计算机的应用程式不止需要处理数字,需要处理字符,因此需要了ASCII码(Aemrican Stantdard Code for Information Interchange)用7个bit来编码128个字符。

二进制存储和寄存器 Binary storage and registers

  • 二进制信息必须以物理形式存在,一个单元(Cell)必须拥有两种稳定的状态来代表0和1,寄存器就是一组二进制单元。寄存器之间传输并储存二进制信息

二进制逻辑 Binary logic

  • 二进制逻辑是用逻辑运算处理两个分离的值
  • 三种基础的逻辑运算:AND OR NOT
  • 逻辑门是一种处理一个或多个输入来产生输出的电路元件,多于两个的输入也是ok的
  • 电压操作,在一个范围内,但被解释为两个值中的任何一个。例如高电位位1,低电位为0。