[toc]

编码

BCD码

  • 用4为二进制数(可以表示 2 4 = 16 2^4=16 24=16种不同的值)来表示10个十进制数0~9

    • 这种编码方法使得二进制数和十进制数可以快速进行转换
    • 容易发现,BCD码中有6中冗余码不代表某个十进制数

8421BCD

  • 有权BCD码

    • 权值从高到低为 8 , 4 , 2 , 1 8,4,2,1 8,4,2,1
    • b 4 b 3 b 2 b 1 b_4b_3b_2b_1 b4​b3​b2​b1​代表的十进制数就是按权展开 ∑ i = 1 4 b i 2 i − 1 \sum\limits_{i=1}^{4}b_i2^{i-1} i=1∑4​bi​2i−1
  • 具有的6个冗余码为: 1010 ∼ 1111 1010\sim{1111} 1010∼1111
修正
  • 两 个 4 位 8421 B C D 码 相 加 的 结 果 如 果 不 大 于 9 即 : ( 1001 ) 8421 B C D 两个4位8421BCD码相加的结果如果不大于9即:(1001)_{8421BCD} 两个4位8421BCD码相加的结果如果不大于9即:(1001)8421BCD​,则不需要修正
  • 否则需要修正:
    • 例 如 : 15 = 6 + 9 = 011 0 2 + 100 1 2 = 111 1 2 例如:15=6+9=0110_2+1001_2=1111_2 例如:15=6+9=01102​+10012​=11112​

      • 而 15 = 0001 ‾ 0101 ‾ 15=\underline{0001}\overline{0101} 15=0001​0101,即,1,5的权分别用一个8421BCD码分别表示
      • 显然1111不是正确结果
    • 修正方法简单,假设某个结果X=A+B落在冗余码区间内的 1010 ∼ 1111 1010\sim 1111 1010∼1111,则对X+6,即可
      • 从16进制的角度(对应4为8421BCD码)来看容易理解
      • 超过9的部分记为T落入冗余区间(跨度为 6 ( = 011 0 2 6(=0110_2 6(=01102​)),为了还原T,额外+6来填补冗余区间,还原了T,得到正确结果
      • 上 例 111 1 2 + 011 0 2 = 1010 1 2 上例1111_2+0110_2=10101_2 上例11112​+01102​=101012​用8421BCD表示(高位补0)得到 0001010 1 8421 B C D 00010101_{8421BCD} 000101018421BCD​
BCD转10进制数
  • 不同于按权展开,根据8421BCD的定义,将BCD二进制串从低位向高位每四个一组,分别转换为10进制的数码(0~9)中的一个即可

    • eg. 10100 1 8421 B C D = 2 9 10 101001_{8421BCD}=29_{10} 1010018421BCD​=2910​

算数逻辑单元ALU

  • ALU是一种功能强的组合逻辑电路
  • 能够进行多种算数运算和逻辑运算
    • 加减乘除都能够归结为加法运算,ALU的核心是带标志的加法器

定点数加减计算

  • 对于定点数

    • 小数点约定在最左边就是顶点小数;
    • 约定在最右边就是定点整数
  • 实际上机器内部没有小数点
    • 因此在运算过程中,可以不考虑是小数还是整数,只需要关心它们的符号数值位

补码加减法运算

  • 不同于原码的加减法,(原码的符号位是单独处理,而不是统一做加法)
  • 补码才可以将符号位和数值位一样做加法

补码加法的基本公式如下:

加法

  • 整 数 [ A ] 补 + [ B ] 补 = [ A + B ] 补 ( m o d 2 n + 1 ) 整数 \quad[A]_{补}+[B]_{补}=[A+B]_{补}\left(\bmod 2^{n+1}\right) 整数[A]补​+[B]补​=[A+B]补​(mod2n+1)
    小 数 [ A ] 补  + [ B ] 补 = [ A + B ] 补 ( m o d 2 ) 小数 \quad[A]_{\text {补 }}+[B]_{补}=[A+B]_{补}(\bmod 2) 小数[A]补 ​+[B]补​=[A+B]补​(mod2)
  • 即补码表示的两个数在进行加法运算时,可以把符号位与数值位同等处理,
    • 只要结果不超出机器能表示的数值范围,

      • 运算后的结果按 $ 2^{n+1}$ 取模 ( 对于整数 )
      • 或按 2 取模 ( 对于小数 ) ,
    • 就能得到本次加法的运算结果。
  • 可根据补码定义,按两个操作数的四种正负组合情况加以证明。

减法

  • 记 y = A − B = A + ( − B ) 记y=A-B=A+(-B) 记y=A−B=A+(−B)
  • 则对上述三个表达式同时取补码
    • [ y ] 补 = [ A − B ] 补 = [ A + ( − B ) ] 补 [y]_补=[A-B]_{补}=[A+(-B)]_{补} [y]补​=[A−B]补​=[A+(−B)]补​
  • 由补码加法基本公式,展开可得
  • 整数 [ A − B ] 补 = [ A ] 补 + [ − B ] 补 ( m o d 2 n + 1 ) \quad[A-B]_{补}=[A]_{补}+[-B]_{补}\left(\bmod 2^{n+1}\right) [A−B]补​=[A]补​+[−B]补​(mod2n+1)
  • 小数 [ A − B ] 补  = [ A ] 补 + [ − B ] 补  ( m o d 2 ) \quad[A-B]_{\text {补 }}=[A]_{\text {补}}+[-B]_{\text {补 }}(\bmod 2) [A−B]补 ​=[A]补​+[−B]补 ​(mod2)

小结

  • 符号位和数值位一起参与运算,加/减结果的符号位也在运算中直接得出
  • 最终的运算结果保留最低位开始的n+1位(也就是能够刚好放在寄存器中),而更高位丢弃

补码之间的减法:

  • 此外,还成立:

    • C = A − B C=A-B C=A−B

      • C ( C ) = C ( A ) − C ( B ) C(C)=C(A)-C(B) C(C)=C(A)−C(B)
      • C ( C ) = C ( A ) + C ( − B ) C(C)=C(A)+C(-B) C(C)=C(A)+C(−B)
    • [ A ] 补 − [ B ] 补 = [ A ] 补 + ( − [ B ] 补 ) = [ A ] 补 + [ − B ] 补 = [ A − B ] 补 [A]_{补}-[B]_{补}=[A]_{补}+(-[B]_{补})\\ =[A]_{补}+[-B]_{补}=[A-B]_{补} [A]补​−[B]补​=[A]补​+(−[B]补​)=[A]补​+[−B]补​=[A−B]补​

  • 这里的A,B都是真值.

  • 因此,若机器数采用补码, 当求 A-B 时, 只需先求 [ − B ] 补 [-B]_{补} [−B]补​

  • 由 C ( B ) 求 C ( − B ) 是 容 易 的 , 利 用 规 律 : 由C(B)求C(-B)是容易的,利用规律: 由C(B)求C(−B)是容易的,利用规律:

    • 真 值 x 的 相 反 数 − x 的 补 码 C ( − x ) 可 通 过 将 C ( x ) 的 每 一 位 ( 包 括 符 号 位 ) 取 反 再 加 1 得 到 真值x的相反数-x的补码C(-x)可通过将C(x)的每一位(包括符号位)取反再加1得到 真值x的相反数−x的补码C(−x)可通过将C(x)的每一位(包括符号位)取反再加1得到
    • 对 于 给 定 的 A − B 算 式 , 通 常 A , B 都 是 正 数 , 从 而 x 的 补 码 和 原 码 相 同 : C ( x ) = T ( x ) 对于给定的A-B算式,通常A,B都是正数,从而x的补码和原码相同:C(x)=T(x) 对于给定的A−B算式,通常A,B都是正数,从而x的补码和原码相同:C(x)=T(x)

总结和案例

  • 设机器数字长为8bit(含有1bit符号位)

    • 若A=+15;B=+24;
    • 记 y = A − B y=A-B y=A−B;求:
      • C ( y ) = C ( A − B ) ; C(y)=C(A-B); C(y)=C(A−B);
      • 并从 C ( y ) C(y) C(y)还原出y真值
  • 分析:主要分为是3~4个步骤(第4个步骤取决于是否要得到真值形式)

将真值用二进制表示

  • A=+15=+0001111
  • B=+24=+(3*8)=+11*1000=+0011000

计算被减数,减数和减数相反数的补码

  • 从真值直接得到对应的补码形式

    • 原码和真值仅相差符号位的表现形式而已
  • C(A)=0,000 1111
  • C(B)=0,001 1000或T(-B)=1,001 1000
    • 这两个用其中一个即可,取决于习惯,用来计算C(-B)
  • C(-B)=1,110 0111+1=1,110 1000
计算C(-B)有3条路

PC_@BCD码(8421BCD)@定点数加减法@补码减法公式相关推荐

  1. 原码,反码,补码,移码的概念以及各自的用途和优点

    1.原码 将最高位用作符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值的表示形式. 例如,假设用8位表示一个数,则+10的原码是00001010,-10的原码是10001010. 直接使 ...

  2. Python实现十进制整数与BCD码转换

    Python实现十进制整数与BCD码转换 BCD码 8421BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8.4.2.1,故称为有权BCD码.和四位自然二进制码不同的是,它 ...

  3. 数制和码制(数制的转换的方法,BCD码<8421,2421,5421,余三码>,格雷码,原码,反码,补码,定点数和浮点数)

    目录 1.数制的转换 1)二,八,十六进制进制转十进制 加权系数求和法 2)十进制转二,八,十六进制 除基取余法(短除法) 减权定位法 3)二,八,十六进制的相互转换 2.BCD码 3.格雷码 4.原 ...

  4. 【基础知识】~ 进制转换、补码、格雷码、BCD码、独热码

    1. 进制转换 1.1 十进制 to 二进制 正整数转二进制:除二取余,然后倒序排列,高位补零. 负整数转二进制:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一. 小数转二进制:对小 ...

  5. 关于定点数、原码、反码、补码的理解

    定点数: 纯整数.纯小数 名字由来: 小数点的位置是约定的:纯整数约定虚拟的小数点位于最后一位之后:纯小数约定虚拟的小数点位于第一位之前:由 于假想了一个小数点的位置,而且这个位置是约定好就不变的,所 ...

  6. 原码、反码、补码都是有符号定点数的表示方法。

    匿名用户 推荐于2017-11-18 数在计算机中是以二进制形式表示的. 数分为有符号数和无符号数. 原码.反码.补码都是有符号定点数的表示方法. 一个有符号定点数的最高位为符号位,0是正,1是副. ...

  7. C语言bcd码减法过程,bcd码的减法运算规则举例.ppt

    bcd码的减法运算规则举例 第1章:微型计算机基础 本章基本要求: ⑴ 单片微型计算机的含义 ⑵ 各系列单片机的特点 ⑶ 51系列单片机的概念及指标(重点) ⑷ 单片微机工业产品概念 第1章:微型计算 ...

  8. 8位可控加减法电路设计_C++手撕底层:位、字节、原码、反码、补码的深入理解...

    最近小编在写C++编码转换的问题,都快被弄疯来,看来很多资料感觉自己在计算机变成底层这一块不是很熟练,所以恶补来一下,这边总结出来给大家分享. 大家都知道计算机只认识0和1,但是0和1对人又不友好,怎 ...

  9. 原码,反码,补码,加法减法在计算机内存中的运算方法

    什么是原码:所有数转化成二进制的序列就是原码[正数原反补相同] 什么是补码:原码通过取反得反码,反码+1得补码[负数存的是补码] 所有信息在计算机在内存中,都是由二进制方式存储 计算机自能进行加法运算 ...

最新文章

  1. 树莓派进阶之路 (009) - 树莓派ftp脚本(原创)
  2. pep8 python 编码规范_Python合集之Python语法特点(三)
  3. leetcode(1)485——最大连续 1 的个数(C++)
  4. python批量json文件转xml文件脚本(附代码)
  5. UUID工具类及使用
  6. v8引擎和v12引擎_v8和v12发动机的区别
  7. CVPR 2020 论文大盘点-图像增强与图像恢复篇
  8. python使用kafka原理详解真实完整版_史上最详细Kafka原理总结
  9. php 日期算法,php日期时间计算,转载
  10. linux 进入shell命令,linux或者shell进入vi命令
  11. Ubuntu 16.04 修改为几个国内更新源
  12. 2022百度之星程序设计大赛 - 初赛 - 第二场 1001 和
  13. Basic4Android简单教程(从安装到编译部署到手机)
  14. Linux如何安装/卸载.deb文件(保姆级教程)
  15. 何谓情比金坚——婚姻来源和相关说法
  16. Package cmake is not available, but is referred to by another package.
  17. 【观察】PowerScale:构筑“智慧广电”创新基石
  18. 按照黑马教程学习javaWeb出现Property ‘dataSource‘ is requir报错HTTP Status 500 – Internal Server Error——解决方案
  19. keil 4c语言读写寄存器,【STM32单片机学习】第四课:GPIO控制LED(用寄存器编程)
  20. long term recurrent convolutional networks for visual recognition and description

热门文章

  1. 如何用 Python 和 API 收集与分析网络数据?
  2. This primary key of “id“ is primitive !不建议如此请使用包装类 in Class
  3. arduino灯光装置_创客实战 | 用Arduino制作一款奇幻的“灯光隧道”
  4. 规则引擎——Drools
  5. python雷达图详解_python绘制雷达图实例讲解
  6. 把手机变成电脑的遥控器
  7. 用nginx搭建http透明代理
  8. SAM9X60 curiosity开发板,SYSFS文件系统控制板载三色Led
  9. SqlServer表中添加新字段
  10. 中国教育统计年鉴(1949-2021)