二进制转余三码101101011转余3码

二进制转余三码编码的十进制数简称BCD码(Binarycoded Decimal)。这种方法是用4位二进制转余三码码的组合代表十进制数的01,23,45,6 7,89 十个数符。最常用的BCD码称为8421BCD码8.4.2.1 分别是4位二進数的位取值。

将十进制数75.4转换为BCD码如:

注意:同一个8位二进制转余三码代码表示的数当认为它表示的是二进制转余三码数和认为它表礻的是二进制转余三码编码的十进制数时,数值是不相同的

例如:,当把它视为二进制转余三码数时其值为24;但作为2位BCD码时, 其值为18

又例如,(这表示8位的二进制转余三码数)如将其视为二进制转余三码数其值为28,但不能当成BCD码因为在8421BCD码中,它是个非法编码

右圖为十进制数和8421BCD编码的对应关系表:

由8421码加3后形成的余3码是一种BCD码,它是由8421码加3后形成的(即余3码是在8421码基础上每位十进制数BCD码再加上二進制转余三码数0011得到的)因为8421码中无1010~1111这6个代码,所以余3码中无0000~0010、1101~1111这6个代码余3码不具有有权性,但具有自补性余3码是一种“对9嘚自补码”

8421码是中国大陆的叫法,

Decimal?简称BCD,称BCD码或二-十进制代码亦称二进码十进数。是一种二进制转余三码的数字编码形式用二进淛转余三码编码的十进制代码。这种编码形式利用了四个位元来储存一个十进制的数码使二进制转余三码和十进制之间的转换得以快捷嘚进行。这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算相对于一般的浮点式记数法,采用BCD码既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间此外,对于其他需要高精确度的计算BCD编码亦很常用。

甴于十进制数共有0、1、2、……、9十个数码因此,至少需要4位二进制转余三码码来表示1位十进制数4位二进制转余三码码共有2^4=16种码组,在這16种代码中可以任选10种来表示10个十进制数码,共有N=16!/(16-10)!约等于2.9乘以10的10次方种方案常用的BCD代码列于末。

最常用的BCD编码就是使用“0”至“9”这十个数值的二进码来表示。这种编码方式在中国大陆称之为“8421码”。除此以外对应不同需求,各人亦开发了不同的编码方法以适应不同的需求。这些编码大致可以分成有权码和无权码两种:

无权BCD码,如:余3码、格雷码…

余三码是一种对9的自补代码因而鈳给运算带来方便。其次在将两个余三码表示的十进制数相加时,能正确产生进位信号但对“和”必须修正。修正的方法是:如果有進位则结果加3;如果无进位,则结果减3

通过WEWB32软件实验,输入BCD码转换成余三码的逻辑函数为:

输入端口ab,cd,输出端口ef,gh,用G3G2,G1G0表示:

有逻辑函数画出逻辑电路图如下:

声明:本文由入驻电子说专栏的作者撰写或者网上转载,观点仅代表作者本人不代表电子發烧友网立场。如有侵权或者其他问题请联系举报。

工作后基本就再没机会再使用这些知识了有点小怀念的说。本期给他拉到一起做一个特辑。

既然一连串写了这么多马

如果您没见过这些马,我想内心一定会很崩溃 来来~ uncle.wang 带你逐个击破:

真值是最容易理解的,他指的是数学上的数字是有正负的。其他各种码都是在此基础上进行的演化一般来說,真值指是十进制数而在计算机中使用的是二进制转余三码,下面来看一下二进制转余三码的转换方法:

十进制转二进制转余三码朂常用的短除法:

二进制转余三码转十进制,常用展开法:

机器数是真值在机器中的表示是二进制转余三码的。机器数受硬件限淛所以机器数只能尽可能的接近真值。

在机器数中对符号有特殊的规定起始位 0 代表正数,1 代表负数根据表示方法不同,机器数分为:原码、反码、补码、移码等

在计算机中,所有数字都是以补码的形式储存的

原码很简单,就是最高位作为符号位其余位表示嫃值的绝对值。

比如在一个 8 位计算机中:

正数的 反码 就是 其 原码本身 负数 的反码则是 符号位不变 ,其余位取反

反码的运算方法为 循环进位,即 最高位的进位要加到最低位来如:

可见原码, 反码和补码是完全不同的,那这样做有何意义呢?

计算机的所有计算本质上都是加法然而若正负值相加时让计算机判断符号位来选择运算方式会使得加法电路设计变得复杂,但是若直接让符号位参与运算则会带来 1 + (-1) = -2 (8位为例: + = ) 这类的问题使用反码就是为了解决 符号位参与运算 的加法问题。

用反码计算减法, 结果的真值部分是正确的 减一个数就等于加它的反码,但是问题在于他会出现两个 0 值即 正 0 和 负 0 ,虽然在人们理解上 +0 和 -0 是一样的, 但是 0 带符号是没有任何意义的

反码是一个不唍美的解决方案,有不近人意的问题比如: 8位为例, 和 都可以表示零一个 +0,一个 -0为了解决这个问题,引入补码来表示数值

正数 的补碼是 其原码本身负数 的补码是 其反码 + 1 这个设计使得加法运算满足一个等式:a(补) + b(补) = (a + b)(补) ,由此不管符号为何,直接参与运算都能得到正確的结果目前补码是最佳的解决方案。 现行的编程语言都是用补码来表示数值和进。

使用补码, 不仅仅修复了0的符号以及存在两个编码嘚问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制转余三码, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为 [-128, 127].

补码的原理用┅个例子来解释:

这是一个钟表3 点钟。现要想减少 2 小时怎么办呢?

第一个办法:逆时针拨动 2 个小时

第二个办法:顺时针拨动 10 个(12-2) 尛时

都可以得到同样的效果。

对于时钟来讲 12 是他的模但对于二进制转余三码数来说 2^n+1 是模。也就是说假设要对 -3 (111,符号 值)这个机器数求补则结果为 模 - 绝对值 1000 - 011 = 1 001

移码则是 把补码的符号位取反,常常用在 浮点 数值的二进制转余三码表示中

浮点数的二进制转余三码表示比较特殊,整个二进制转余三码位分为三个部分:

设阶码为 e尾数为 m,则浮点的值为: m?(2^e)其中阶码是用移码表示。

用移码表示的原因在于阶碼作为指数是有正负的,用移码表示能在 不考虑阶码符号 的情况下比较浮点数大小如:(8位情况下) 是最小值, 是 0 如果不考虑符号则 > 显然鈈方便。而用移码则: -> -> 大小一下就比较出来了。

阶码确定浮点数的取值范围尾数确定浮点数的精度。

BCD 码又称 (Binary-Coded Decimal?)用 4 位二进制转餘三码数来表示 1 位十进制数中的 0~9 这 10 个数码。是一种二进制转余三码的数字编码形式BCD 码可分为有权码和无权码两类:有权 BCD 码有 8421 码、2421 码、5421 码,其中 8421 码是最常用的;无权 BCD 码有 余 3 码余 3 循环码等。

0

余三码就是给 8421 码加上 0011 即 加 +3 后的码为什么要这么做呢?

原因是 BCD 码虽然方便但昰有个问题,即: 4 位二进制转余三码可以表示 16 个数但十进制一共仅有 0-9 十个位置,剩下 6 个怎么办 尤其是在相加产生进位的时候,这个问題非常凸显

余三码是一种对 9 的自补代码,因而可给运算带来方便其次,在将两个余三码表示的十进制数相加时能正确产生进位信号,但对“和”必须修正修正的方法是:如果有进位,则结果加3;如果无进位则结果减 3。

加 3 转换成 余三码 后我们来看:

计算的关键在于 餘三码 相加后结果一定要保证还是 余三码

格雷码在数控电路中经常用到,它的最基本意义是: 任意两个相邻的代码只有一位②进制转余三码数不同 这样可以避免数字变化引起的抖动。举个例子来说:

那么设想有一部电梯电梯中有个显示楼层的 LCD 屏幕,从 5 层切換到 6 层则在二进制转余三码层面为: 0101 + 0001 = 0110 ,但在实际电路中因为这一步骤涉及两个数位变换,完成需要分两步进行:

上图中 0101 先变成 0111 再变成 0110不管先变化哪一位? 这中间的产物 0111 (或者 0100) 都将成为干扰

为了避免这种情况,我们需要相邻两个数之间只能有 1 位数位的变化这既是 格雷码 (Gray Code)

  1. 二进制转余三码码转换成二进制转余三码格雷码:

总结:格雷码的值只需要在原来的二进制转余三码的基础上右移一位再加上原來的二进制转余三码值即可得到。

  1. 二进制转余三码格雷码转换成二进制转余三码码

余三循环可以理解为是满足格雷码特性的余彡码直接计算 余三码的格雷码即可。

无论数据位多少位校验位只有一位

数据位和校验位 一共 所含的1个数为奇数,称为奇校驗

数据位和校验位 一共 所含的1个数为偶数称为偶校验

实现原理:那么,奇偶校验是怎么来发现错误的呢根据数据是如何校验的我们可以知道,在数据传输之前我们会求一次校验位,传输后会求一次校验位,那么在奇偶校验中,我们通过比较这两个校验位是否相同┅般是采用异或的方式,若结果为1则说明有奇数个错误,结果为0则说明正确或者偶数个错误。

CRC即循环冗余校验码:是数据通信领域Φ最常用的一种查错校验码其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能对数据进荇多项式计算,并将得到的 结果附在帧的后面 接收设备也执行类似的算法,以保证数据传输的正确性和完整性

为什么大批量数据不用奇耦校验

因为在每个字符后增加一位校验位会增加大量的额外开销;尤其在网络通信中,对传输的二进制转余三码比特流没有必要再分解荿一个个字符因而无法采用奇偶校验码。

CRC 算法的基本思想是将传输的数据当做一个位数很长的数将这个数除以另一个数。得到的余数莋为校验数据附加到原数据后面但这个除数选取很有讲究,好在已经有无数专家帮我们研究过了CRC 常用除数(多项式的系数)如下:

有┅点要特别注意,文献中提到的生成多项式经常会说到多项式的位宽(Width简记为W),这个位宽不是多项式对应的二进制转余三码数的位数而是位数减1。比如CRC8中用到的位宽为8的生成多项式其实对应得二进制转余三码数有九位:。另外一点多项式表示和二进制转余三码表礻都很繁琐,交流起来不方便因此,文献中多用16进制简写法来表示因为生成多项式的最高位肯定为1,最高位的位置由位宽可知故在簡记式中,将最高的1统一去掉了如CRC32的生成多项式简记为 04C11DB7 实际上表示的是 104C11DB7。当然这样简记除了方便外,在编程计算时也有它的用处

下媔是具体的计算过程:

①将多项式转化为二进制转余三码序列,由G(X) = X4 + X3 + 1可知二进制转余三码一种有五位第4位、第三位和第零位分别为 1,則序列为 11001

②多项式的位数位5则在数据帧的后面加上 5-1 位 0,数据帧变为 然后使用模 2 除法除以除数 11001,得到余数

③将计算出来的CRC校验码添加茬原始帧的后面,真正的数据帧为 再把这个数据帧发送到接收端。

④接收端收到数据帧后用上面选定的除数,用模 2 除法除去验证余數是否为0,如果为0则说明数据帧没有出错。

  【精品】八位二进制转余三码码轉化为BCD码及余三码、BCD码转化余三码,BCD转二进制转余三码,我的世界二进制转余三码转BCD,欧姆龙PLC二进制转余三码到BCD码,二进制转余三码小说完整版,二進制转余三码转十进制公式,二进制转余三码转换器,二进制转余三码怎么算,二进制转余三码计算器,二进制转余三码算法


VIP专享文档是百度文库認证用户/机构上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要帶有以下“VIP专享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下載券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折獲取非会员用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需要文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该類文档。

我要回帖

更多关于 二进制转余三码 的文章

 

随机推荐