十进制数的编码与运算
简介
- 在计算机中采用4位二进制码对每个十进制数位进行编码。
- 4位二进制码有16中不同的组合,从中选出10种来表示十进制数位的0~9,有多种方案可供选择,下面介绍最常用的几种。
1 有权码
- 表示一位十进制数的二进制码的每一位有确定的权。
- 一般用8421码,其4个二进制码的权从高到低分别为8、4、2 和 1.
- 用0000、0001、···、1001 分别表示0、1、···、9,每个数位内部满足二进制规则,而数位之间满足十进制规则,故称这种编码为“以二进制编码的十进制码”(binary coded decimal,BCD).
十进制 | 二进制 |
---|---|
0 | 0000 |
7 | 0111 |
12 | 0001 0010 |
13 | 0001 0011 |
127 | 0001 0010 0111 |
234 | 0010 0011 0100 |
1.1 BCD码加法运算修正规则:
如果两个一位BCD码相加之和小于或等于(1001)2,即(9)10,不需要修正;
如果相加之和大于或等于(10)10,要进行加6修正,并向高位进位,进位可以在首次相加或修正时产生。
1 + 8 = 9 4 + 9 = 13 9 + 7 = 160 0 0 1 0 1 0 0 1 0 0 1 + 1 0 0 0 + 1 0 0 1 + 0 1 1 1 ————————————————— ————————————————— —————————————————————1 0 0 1 1 1 0 1 1 0 0 0 0 不需要修正 + 0 1 1 0 修正 + 0 1 1 0 修正————————————————————— —————————————————————1 0 0 1 1 1 0 1 1 0
1.2 BCD码加6修正的由来
十进制 | 二进制 | BCD码 | 二进制差值 |
---|---|---|---|
10 | 1010 | 1 0000 | 0110 |
11 | 1011 | 1 0001 | 0110 |
12 | 1100 | 1 0010 | 0110 |
13 | 1101 | 1 0011 | 0110 |
14 | 1110 | 1 0100 | 0110 |
15 | 1111 | 1 0101 | 0110 |
16 | 1 0000 | 1 0110 | 0110 |
17 | 1 0001 | 1 0111 | 0110 |
18 | 1 0010 | 1 1000 | 0110 |
19 | 1 0011 | 1 1001 | 0110 |
说明:两个十进制一位数相加的结果小于或等于19,在[10, 19]范围内,每一个十进制数的BCD码都比二进制码小了6,换算成二进制码,也就是0110.
2 无权码
表示一个十进制数位的二进制码的每一位没有确定的权。使用较多的是余3码(Excess-3 Code)和格雷码(Gray Code),格雷码又称“循环码”。
十进制 | 余3码 | 格雷码(1) | 格雷码(2) |
---|---|---|---|
0 | 0011 | 0000 | 0000 |
1 | 0100 | 0001 | 0100 |
2 | 0101 | 0011 | 0110 |
3 | 0110 | 0010 | 0010 |
4 | 0111 | 0110 | 1010 |
5 | 1000 | 1110 | 1011 |
6 | 1001 | 1010 | 0011 |
7 | 1010 | 1000 | 0001 |
8 | 1011 | 1100 | 1001 |
9 | 1100 | 0100 | 1000 |
2.1 余3码
在8421码的基础上,把每个编码都加上0011而形成的,如上表所示。
2.1.1 加法规则
当两个余3码相加不产生进位时,应从结果中减去0011;
产生进位时,应将进位信号送入高位,本位加0011。
(28)~10~ + (55)~10~ = (83)~10~0 1 0 1 1 0 1 1 (28)~10~+) 1 0 0 0 ~1~ 1 0 0 0 (55)~10~———————————————————————————————————————————————— 低位向高位产生进位,高位不产生进位。1 1 1 0 0 0 1 1-) 0 0 1 1 +) 0 0 1 1———————————————————————————————————————————————— 低位+3,高位-3。(0011)~2~ = (3)~10~1 0 1 1 0 1 1 0
二进制的(1010)2需要借助(0110)2才能完成BCD码的进位,造成相加结果少了6,也就是加数和被加数都少了3,所以相加结果需要加3得到余3码。
2.2 格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。
若不作特别说明,格雷码就是指典型格雷码,它可从自然二进制码转换而来。
优点:从一个编码变到下一个相邻编码时,只有1位发生变化。
特点:
- 格雷码属于可靠性编码,是一种错误最小化的编码方式。因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于方向的转角位移量-数字量的转换中,当方向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性;
- 格雷码是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便;
- 由于格雷码是一种变权码,每一位码没有固定的大小,很难直接进行比较大小和算术运算,也不能直接转换成液位信号,要经过一次码变换,变成自然二进制码,再由上位机读取;
- 典型格雷码是一种采用绝对编码方式的准权码,其权的绝对值为2i-1(设最低位i=1);
- 格雷码的十进制数奇偶性与其码字中1的个数的奇偶性相同。
2.2.1 格雷码编码方法
2.2.1.1 递归生成码表
这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造:
- 1位格雷码有两个码字;
- (n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0;
- (n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1;
- n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1。
1位格雷码 | 2位格雷码 | 3位格雷码 | 4位格雷码 |
---|---|---|---|
0 | 00 | 000 | 0000 |
1 | 01 | 001 | 0001 |
11 | 011 | 0011 | |
10 | 010 | 0010 | |
110 | 0110 | ||
111 | 0111 | ||
101 | 0101 | ||
100 | 0100 | ||
1100 | |||
1101 | |||
1111 | |||
1110 | |||
1010 | |||
1011 | |||
1001 | |||
1000 |
2.2.1.2 异或转换
将二进制码从右向左依次编号为0,1,2,···,n-1。
二进制码–>格雷码:
G~i~ = B~i~ xor B~i+1~,i = 0,···,n-1,令B~n~ = 0
格雷码–>二进制码
G~i~ = B~i~ xor B~i+1~,i = n-1,···,0,令B~n~ = 0
2.2.1.3 卡诺图
- 将卡诺图变量分为两组,变量数目相近(最好相等)
- 以逻辑变量高位在左低位在右建立卡诺图
- 从卡诺图的左上角以之字形到右上角最后到左下角遍历卡诺图,依次经过格子的变量取值即为典型格雷码的顺序
三位格雷码(建立在二位格雷码基础上)
AB\C | 0 | 1 |
---|---|---|
00 | 000 --> | 001 |
01 | 010 | <-- 011 |
11 | 110 --> | 111 |
10 | 100 | <-- 101 |
四位格雷码(建立在三位格雷码基础上)
AB\CD | 00 | 01 | 11 | 10 |
---|---|---|---|---|
00 | 0000 --> | 0001 --> | 0011 --> | 0010 |
01 | 0100 | <-- 0101 | <-- 0111 | <-- 0110 |
11 | 1100 --> | 1101 --> | 1111 --> | 1110 |
10 | 1000 | <-- 1001 | <-- 1011 | <-- 1010 |
2.2.1.4 使用异或乘除
用异或代替加减进行二进制竖式乘除,称为异或乘除,它的特点是无进退位。
如:10101除以11将变成1100余1。
二进制转格雷码:
只要异或乘以二分之三,即二进制的1.1,然后忽略小数部分;也可以理解成异或乘以三(即11),再右移一位。
格雷码转二进制:
异或乘以三分之二,即除以1.1,忽略余数;或者左移一位,再异或除以三,忽略余数。
十进制数的编码与运算相关推荐
- 【python】关于十进制数取异或运算原理
案例一 a=10 b=15 c=a^b d=bin(c).count("1") print(c) print(d) 运行结果为:c=5,d=2,这是怎么计算的呢?首先,a=10,转 ...
- 计算机字符串 对应10进制数,计算机系统基础(五)十进制数的表示
http://kaito-kidd.com/2018/08/14/decimal-expression/ 我们知道计算机中数字都是使用的二进制表示和运算,对于我们熟悉的十进制数字,可以通过数值进制公式 ...
- 51单片机实现三位十进制数加减乘除运算
51单片机实现三位十进制数加减乘除运算 一.题目 51单片机IO接口作业 请将附件给出的Proteus图用51单片机完成一个计算器功能. 1.显示采用动态分时8位共阳数码管输出. 2.采用4*4矩阵键 ...
- 2021数字电路课程设计 一位十进制数加减法运算电路
设计任务: 用集成芯片设计一位十进制数加减法运算电路,具体要求如下: (1)能实现一位十进制数的加法运算,最大值为9+9=18. (2)能实现一位十进制数的减法运算,最小值为0-9=-9. (3)能显 ...
- c语言中十六进制可以直接和十进制运算吗,十进制与十六进制怎么理解?,C语言中十进制数和十六进制数能直接运算吗...
16进制 10进制 00 0 01 1 02 2 .. . 09 9 0A 10 0B 11 0C 12 0D 13 0E 14 0F 15 10 16 1F 31 20 32 将数字符号按序排列成数 ...
- 计算机二进制基础列式,计算机基础;十进制数100对应的二进制数、八进制数和十六进制数分别是...
中计数采用了多种记数制,比如:十进制,六十进制(六十秒为一分,六十分为一小时,即基数为60,运算规则是逢六十进一),--.在计算机中常用到十进制数.二进制数.八进制数.十六进制数等,下面就这几种在计算 ...
- 计算机中有关数及编码的知识,计算机中有关数及编码的知识
计算机中有关数及编码的知识 1.计算机是智能化的电器设备 计算机就其本身来说是一个电器设备,为了能够快速存储.处理.传递信息,其内部采用了 大量的电子元件,在这些电子元件中,电路的通和断.电压高低,这 ...
- 计算机十进制数中码数有几个,计算机中的数和码
<计算机中的数和码>由会员分享,可在线阅读,更多相关<计算机中的数和码(27页珍藏版)>请在人人文库网上搜索. 1.第第1章章 计算机中的数和码计算机中的数和码 微机系统原理及 ...
- 计算机有关的基础知识,计算机基础知识之计算机中有关数及编码的知识
1.4 计算机中有关数及编码的知识 1.计算机是智能化的电器设备 计算机就其本身来说是一个电器设备,为了能够快速存储.处理.传递信息,其内部采用了大量的电子元件,在这些电子元件中,电路的通和断.电压高 ...
最新文章
- 链表问题9——复制含有随机指针节点的链表(初阶)
- 新到DELL M1000e 刀片服务器
- 谈一谈HTTP中Get与Post的区别与主要应用场景
- mysql connector开源协议_Spring Boot 集成 MariaDB Connector/J 连接 MySQL
- 成功在家用ssh远程连上了学校电脑虚拟机当中的ubuntu(代价是虚拟机全部黑屏只能用SSH连接了!)
- 【原创】ASP.NET C# 对SQL/ACCESS 数据库的备份和还原函数
- 第0课【课前准备】Keil安装 ISP程序下载
- 网络编程(三)sqlist轻量级数据库的简单应用
- C++之STL-vector-string-list-deque-queue-map-文件操作
- python word 表格最大列数_Excel表格中的行数和列数的最大是多少?
- 使用cmd命令查看WiFi密码
- 《Learning for Disparity Estimation through Feature Constancy》
- springboot读取xml配置文件
- 32 任意项级数敛散性的判别法
- vue里面动态渲染图片?
- 免费语音转文字的软件有哪些?快来看看这几个软件
- 阿里云之如何使用阿里大鱼给喜欢的人发短信(1)
- iOS App完整项目
- 图片无损压缩(ubuntu 安装 )
- Imagenet 完整数据集下载
热门文章
- 什么是Web3D?Web3D技术发展历程以及Web3D应用场景
- android gps源码分析,Android编程之Android GPS ——AGPS源码分析及配置
- 备战Noip2018模拟赛11(B组)T4 Path 好路线
- ​魔术APP开发软件为魔术爱好者展示更神奇的魔术表演​
- 计算机高手是怎么炼成的
- W5500 图片嵌入STM32 FLASH笔记(备忘)
- 浅谈Python爬虫(五)【网易云热评爬取实例】
- dhl:AjaxPro的使用后感
- Openjudge:矩阵乘法
- setLayout()和GridData的设置