当前位置: 首页 > news >正文

计算机底层:BDC码

计算机底层:BDC码

 

        BDC码的作用: 人类喜欢十进制,而机器适合二进制,因此当机器要翻译二进制给人看时,就会进行二进制和十进制的转换,而常规的转换法(k*位权)太麻烦。因此就出现了不同的转换方式,BCD码就可以方便地用二进制 表示 十进制。

          BCD码的表示方式:将二进制的4个bit,作为一个十进制。这样就有2^4=16个的二进制状态,再规定这些状态,来表达十进制0-9的数字。因为0-9只需要10个的二进制状态,因此BCD码就会6种状态是冗余的。

        冗余:没有用到,却可以用到的东西。

        有了10中二进制状态就可以与0-9一一对应,以达到提高效率的作用

         BCD码其中包括了: 8421码、余3码、2421码。

8421码:

        

        8421码表示的是:4个bit位的每位权重的8421,也就是2^3、2^2、2^1、2^0 这是就是二进制转换十进制时的前四个位权。

        

         这张图就是8421码对应0-9的数字。

        如果表示985:

        9:1001

        8:1000

        5:0101

        结果就是,二进制:1001 1000 0101

                          十进制:985

8421码的运算:

         先得出5+8=13得结果,然后拆开个位和十位,然后直接带入8421码。

        最后得出:0001 0011

        但是!这样并不是计算机底层的转换,这只是人工转换的一种技巧。比如做题的时候可以这样。但是计算机绝对不是这样!

计算机底层的转换:

         计算机进行5+8,计算机会先将5和8分别对应8421码,转换成:0101、1000,再将这两串二进制丢给ALU计算逻辑单元,得出的结果就是:1101

        但是会发现:1101并不在8421码规定的表中,也就是说1101在在8421码中没定义。

        为了解决这一问题,8421码规定,如果超出得到1010-1111(8421码无定义)区间内的数,那么就会在无定义的这串二进制加上6,也就是加上0110。

        因为8421码有定义的区间在0-9,10种二进制排序的可能;无定义的区间在10-15,5种二进制的可能,一共16种可能,(因为4个二进制可以表示16进制,你当成16进制看)无定义的数+6,超出了16,高位就会进1。

        比如:13+6=19,其中大于16就会进1,得到13。

       但计算机并不会看出13+6,而是看成8421码规定的二进制。也就是1101+0110=1 0011

        最后在按照4个bit = 一个8421规定的十进制,最后可以拆开变成0001 0011

        也就是:0001是1 ;0011是3,即:13

例子,9+9用8421码表示:

        计算机从8421码表映射出来,变成1001+1001,计算机再把这些丢到ALU中,算出结果为:10010,计算机发现这串二进制在8421码的表中无法映射出结果,说明这串二进制在8421码中无定义,计算机就会将这串二进制+0110,也就是:10010+0110=11000,计算机+6得到一串二进制后,按照4bit拆开,0001 1000,再将每4个bit在8421表中映射,最终得到:18

        

余3码: 

        在8421码规定的每个二进制上加上3,也就是+0011

         会发现余3码是没有权位的。因此将:

        8421码称为:有权码

        余3码称为:无权码

        

2421码:

        2421码是有权码:

         2421码的4bit的权位分别是:2、4、2、1

                        比如:表示3

         0x2+0x4+1x2+1x1=3,因此0011表示的是3

        2421码规定,0-4的数字4bit开头必须是0,0-5的数字4bit开头必须是1

        

        因为发现,2421码的十进制5可以用0101表示,同时也可以用1011表示,这就发生了歧异,为了规范表示避免歧义的发生,所以才规定了:  2421码规定,0-4的数字4bit开头必须是0,0-5的数字4bit开头必须是1

 

http://www.lryc.cn/news/30903.html

相关文章:

  • 【C++】平衡二叉搜索(AVL)树的模拟实现
  • [2019红帽杯]childRE
  • 2D图像处理:九点标定_下(机械手轴线与法兰轴线不重合)(附源码)
  • 【二分查找】分巧克力、机器人跳跃、数的范围
  • Hyperf使用RabbitMQ消息队列
  • 【Linux】P3 用户与用户组
  • Spring核心模块——Aware接口
  • Linux网络编程 第六天
  • STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解
  • AcWing1049.大盗阿福题解
  • python日志模块,loggin模块
  • 接口自动化入门-TestNg
  • Spring AOP —— 详解、实现原理、简单demo
  • (蓝桥真题)异或数列(博弈)
  • 4万字数字政府建设总体规划方案WORD
  • CCF/CSP 201709-2公共钥匙盒100分
  • 【OC】Blocks模式
  • 软件设计师教程(七)计算机系统知识-操作系统知识
  • 蓝桥杯2023/3/2
  • 【IoT】创业成功不可或缺的两个因素:能力和趋势
  • 2020蓝桥杯真题日期格式 C语言/C++
  • 总时差与自由时差
  • LeetCode两个数组的交集-跳跃游戏- 最长有效括号
  • mysql普通索引与唯一索引怎么选择
  • JavaWeb开发(三)3.5——Java的反射机制
  • Python每日一练(20230305)
  • SpringBoot三种方法实现定时发送邮件的案例
  • opengl、opengl es、webgl介绍与opengl开发入门
  • Vue3之组件间传值
  • Windows10下使用CMake编译ITK5.2.1步骤