bcd码

关于BCD码的编码和解码

自作多情 提交于 2020-03-04 23:37:57
(1)BCD码(二到十进制编码) 人们通常习惯使用十进制数,而计算机内部多采用二进制表示和处理数值数据, 因此在计算机输入和输出数据时,就要进行由十进制到二进制的转换处理。 把十进制数的每一位分别写成二进制形式的编码,称为二进制编码的十进制数, 即二到十进制编码或BCD(Binary Coded Decimal)编码。 BCD码编码方法很多,通常采用8421编码,这种编码方法最自然简单。 其方法使用四位二进制数表示一位十进制数,从左到右每一位对应的权分别是 23、22、21、20,即8、4、2、1。例如十进制数1975的8421码可以这样得出 1975(D)=0001 1001 0111 0101(BCD) 用四位二进制表示一位十进制会多出6种状态,这些多余状态码称为BCD码中的非法码。 BCD码与二进制之间的转换不是直接进行的, 当需要将BCD码转换成二进制码时,要先将BCD码转换成十进制码,然后再转换成二进制码; 当需要将二进制转换成BCD码时,要先将二进制转换成十进制码,然后再转换成BCD码。 编码过程,将数字69进行BCD编码(注:BCD编码低位在前,后面将不再注释)。 1. 将6,9分别转换成二进制表示:6(00000110)9(00001001),大家可以看到,最大的数字9也只要4个位,在传输过程中白白浪费了4个位; 2. 将69合并为一个字节,分别取6

字符编码--第2章 数的存储

我怕爱的太早我们不能终老 提交于 2020-03-01 22:45:42
第2章 数的存储 第1节 机器数 计算机中,表示数和数的符号的二进制数,叫做机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。 机器数可用不同的码制来表示,常用的有原码、补码和反码表示法。 第2节 真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 第3节 有符号数处理 在计算机运算中,有符号数的表示需要将负数编码为二进制形式。在数学中,任意基数的负数都在最前面加上“−”符号来表示。然而在计算机硬件中,数字都以无符号的二进制形式表示,因此需要一种编码负号的方法。当前有四种方法,用于扩展二进制数字系统,来表示有符号数:原码(sign-and-magnitude),反码(ones' complement),补码(two's

【数电】BCD码简介

偶尔善良 提交于 2020-02-24 20:19:51
BCD码(Binary-Coded Decimal) 一种编码方式,用二进制表示十进制。 由于4位二进制共有16种可能,而只需表示0-9的十个数,故有一定的操作空间。 几种不同的编码方式,以权值命名。 十进制中,1234=1×10^3+2×10^2+3x10^1+4x10^0,权重依次为10^3 10^2 10^1 10^0 8421码 1111=1x2^3+1×2^2+1×2^1+1×2^0 5421码 1111=1×5+1x4+1×2+1×1 特点是,最高位权值为5,将0到9一分为2,后面的5到9可以表示成0+(1~4),直观 2421码 1111=1×2+1×4+1×2+1×1 由于有两个位权重2,为避免重复,规定0101~1010不许用 好处是与9互补 余三码 在用8421码计算时,若涉及进位,和小于16进位不会产生 故把8421码均加11,正好从十进制映射到十六进制,让进位正常发生 格雷码 核心思想:相邻两数间只有一个位元改变 由于首位与末位也满足只有一个位元改变,故称循环码 来源: CSDN 作者: Cer-tain 链接: https://blog.csdn.net/qq_44244120/article/details/104477228

十进制与BCD码转换的算法

匿名 (未验证) 提交于 2019-12-02 23:48:02
BCD是指用二进制来表示十进制数的编码,即用4位二进制来表示一位十进制数,因此4位二进制数表示最大的十进制数9(1001),只取十六个数中的十个数。 比如: $$ BCD码:0x99(153),该BCD码转换成十进制是99. $$ 十进制是逢十进一,而十六进制是逢十六进一,它们之间的每次进位差66,所以一个十进制数要转换成BCD码,要先算清多进位的位数,比如,十进制9999进位了99/10=999/10=9次,每次进位和十六进制进位相比差66,所以一共差了9×6=549×6=54,即99+54=15399+54=153(BCD)。BCD码转化成十进制码也一样。 代码 static uint8_t BCD2DEC(uint8_t bcd) { return (bcd-(bcd>>4)*6);` } static uint8_t DEC2BCD(uint8_t dec) { return (dec+(dec/10)*6);` }

数字电路-二进制转BCD码

杀马特。学长 韩版系。学妹 提交于 2019-11-30 12:07:19
BCD码实际上就是将原本的十进制数的每一位用一个4位二进制数表示,每一位0-9。 二进制4位能够表达的数字范围是0-15。 由此可见BCD码的一段与普通四位二进制来表示十进制位有6的进制差 。所以这就是二进制转化为BCD码的关键所在。下面来讲讲主要步骤: 先预估十进制数的位数,预先给BCD码分好段,此时的BCD码为空无任何数据 接着讲原本的二进制数的最高位一端从BCD码的最低位端插入,也可以看作是将二进制数与BCD码同时左移每次将二进制的头砍掉补到BCD码最后,但个人觉得逐位插入更加形象~ 关键来啦 ,之前提到过 BCD码每一个四位二进制(表示十进制的一位)存储范围是0-9,而原本的二进制四位的存储范围是0-15 ,所以二进制在逐位后端插入BCD码时,若BCD码的某一段(四位二进制)>9 则我们手动给该段+6强行使其进位满足BCD码的存储范围的要求--简单的说就是一直同时左移,某一段>9就+6。 这里可以进行优化,就是常用的 +3(+011)左移法 ,即在左移之前先判断本段是否>4(>0100),若大于则左移之后必然会超过9,所以在左移之前先在该段+3(+011),那么左移之后就已经实现了进位啦。 就这么一直将二进制逐位从底端插入(左移),同时保持每段的范围在0-9内最终就能得到BCD码聊。 来源: https://www.cnblogs.com/GorgeousBankarian

基础项目(4)二级制转换BCD

我只是一个虾纸丫 提交于 2019-11-29 13:17:48
写在 前面的 话 我们的数据在运算或者存储的时候,一般都是以二进制的格式存在的。但是在很多情况下,我们需要将运算结果显示到某种显示设备上,如果直接以二进制的形式来显示的话,会非常不便于我们查看。因此,我们需要首先将二进制数转换为十进制数再进行显示。二进制到十进制的转换有很多种方法。本节,梦翼师兄和大家一起学习一种国外目前最为流行的转换方法 -逐步移位法。通过这种方式,我们不但可以在没有周期差的情况下实现数据格式的转换,同时我们的资源占用量也是相当小的。 基本 概念 BCD码(Binary-Coded Decimal‎)也 称二进码十进数或二 - 十进制 代码。用 4位二进制数来表示1位 十进制数 中的 0~9这10个数码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧 在 FPGA中经常用到,如矩阵键盘输入的数据需要在数码管上显示的时候,矩阵键盘输入的数字是二进制数,而数码管上需要显示的是十进制数,所以需要将二进制数转换成BCD码,这在我们以后的设计中会经常遇到。 7.3 .3逐步移位法原理 在本设计中,我们使用逐步移位法来实现二进制数向BCD码的转换,在设计之前,我们先来了解一下二进制数向BCD码转换的原理-逐步移位法: 变量定义: B:需要转换的二进制数位宽 D:转换后的BCD码位宽 (其中