进制与编码

412 阅读5分钟

❶ 进位记数法

下面一起来了解一下如何用符号来表示数据,这里我们采用进位计数法这样的方法。

image-20220902190444611

  1. 基数的介绍与区分

    • X进制中的X代表的是基数,也即每一个符号位所能够提供的符号数量

      比如二进制在每个符号位能提供2个符号数量(0与1),十六进制则能提供16个符号数量(0/1/2/3/4/5/6/7/8/9/A/B/C/D/E/F)。

    • 为了区分不同基数下的计数,通常可以采用两种形式——

      一种是下标形式:(1001)2 (4A)16

      另一种是在后面加上字母: 如H代表十六进制 3CH,B代表二进制 10001B

  2. 位权是什么?

    比如任意一个r进制数,则一个符号所代表的权重与它离小数点的距离有关

    (rn , rn-1, ......r0, 小数点,r-1, r-2, ......r-m )

    十进制值位值位权

    image-20220902193226063

  3. 计算机组成原理中的计数法

    • 大基数与小基数的计数法在计算机组成原理中的差别:

      基数大(十进制)基数小(二进制)
      位数(指相同的数据需要的表示位数)少(5)多(101)
      机器要存储的运算规则数(乘法为例)10*10=1002*2=4
    • 从上面的讨论可以看出基数大与基数小各有优劣,虽然十进制更加符合人类的习惯,但是在计算机中选择的是二进制,这是因为:0与1可以方便地对应到物理器件的状态,如高电平、低电平;开关的通和断;灯泡的亮和灭;以及一些磁体的磁场的方向,方便计算机的处理

❷ 进制转换

1)十进制与任意进制互相转换

1️⃣ 任意进制转十进制

十进制值位值位权

image-20220902192923006

image-20220902193226063

image-20220902193327013

为计算方便,可以记忆常见的2n次方 image-20220921082638306

2️⃣ 十进制转任意进制

image-20220902194039208

  1. 整数部分-除基取余法

    image-20220902194750302

  2. 小数部分-乘基取整法

    注意,有可能乘不清,这个时候题目应该会规定保留位数

    image-20220902195148211

2)二进制与任意进制互相转换

1️⃣ 二进制与四进制、八进制、十六进制的转换

image-20220902195549141

从四进制、八进制、十六进制写成二进制就是一个逆向的过程

2️⃣ 二进制转十进制的快速方法-BCD码

上面学习了任意进制转十进制的方法,当然也可以用于二进制转十进制,但是这种普适性的方法还是略显麻烦

image-20220903082455081

对于二进制来说,还有更好、更快与十进制相互转换的编码方法——BCD码(Binary-Coded Decimal),这是一种快速转换、每1个十进制位对应4位二进制码的编码方法。

  1. BCD码的映射关系

    由于4个二进制位对应16种不同的状态,而BCD码只选取其中的10种来对应十进制的0~9,所以存在不同的映射方案,举例如下:

    • 8421码:最常用的BCD码

      image-20220903084300038

    • 余3码:8421码的平移3位版本 + (0011)2

      image-20220903084249568

    • 2421码:改变权值定义

      由于权重中出现了两次2,故有一些十进制数可以对应2种编码,比如6既可以对应0110,又可以对应1100,取决于用哪个位上的2。

      为了消除这种歧义,规定:04必须不使用最高位的2, 59必须使用最高位的2

      image-20220903084321035

  2. BCD码的运算规则

    以下规则以8421码为例

    • 基本规则:直接使用二进制码运算

      image-20220903083333387

    • +6修正:如果算出的结果超出了8421的映射表范围,那么+6(0110)修正,这起到一个手动进位的作用。

      image-20220903083449087

3)真值与机器数

image-20220902200310072

我们知道真实的值是有正负的,这种正负在计算机中用0/1来表示,这样真值就对应到了机器数。

  • 但是如果要判断这个机器数是正或者负之后再分类讨论计算,会大大增加计算机的运算量,有没有什么办法可以不分类讨论正负直接运算能得到正确的结果呢?答案就是使用适应运算规则的原码、反码、补码、移码。
  • 如果要扩大机器数的表示范围,就可以使用浮点数。

❸ 各种码

1)ASCII码

1️⃣ ASCII码的定义

将常用的数字、字母、符号共128个字符一一对应成7位 ( 27=128 ) 二进制编码,这样就能把想要表达的符号转化成计算机所能理解的形式,而这些编码就叫做ASCII码。

image-20220903091918306

2️⃣ ASCII映射表

image-20220903092241232

3️⃣ ASCII的运算

运算这一块,基本只需要知道大写字母、小写字母、数字的编码是连续的即可

image-20220903093742833

4️⃣ 汉字的表示与编码

image-20220903094655237

2)字符串编码

❹ 校验码

1)奇偶校验码

奇偶校验码的出现是基于通信方面的要求。我们知道通信在使用比较长的链路传递信息的时候,信道有各种各样的不理想的因素,会导致传递的信号发生跳变,所以为了使接收方能判断出信号发生了跳变,专家们搞出了奇偶校验这一套理论。

image-20220903111403054

奇校验码:在添加奇偶校验位之后,使整个校验码(有效信息位和校验位)中 “1”的个数为奇数

偶校验码:在添加奇偶校验位之后,使整个校验码(有效信息位和校验位)中 “1”的个数为偶数

ps. 无论是奇校验码还是偶校验码,其局限在于只能检测出跳变个数为奇数的传输误差

image-20220903111440209

题目没有告诉校验位,默认最高位是校验位,其余位是信息位

image-20220903110946956

2)海明校验码

\