(二)编码

第二篇记录一下编码。

编码:用于表示不同的数或其他事件的一组n位二进制码的集合,称为一种编码。

码字:一个含义确切的特定的n位组合,称为码字。

总之可以这么理解,编码就是一种表达二进制数集合的方式。

1、十进制数的二进制编码

①十进制数的二进制编码也就是用二进制表示10个十进制数0~9 。

②十进制数的二进制编码方式主要有:BCD码,也叫8421码;5421码;2421码;余3码。下面是表格,但是这里值简述一下8421码;2421码;余3码。

③8421码:如上图所示,是最习惯用二进制表示十进制数的一种方式。最高位的值是8,次高位是4,次低位是2,最低位是1 。因此一个二进制数1001表示的数值就是1*8+1*1 = 9 。也就是按权展开就是十进制数值了。

④2421码:数值小于等于4时,2421码等于8421码;数值大于4时等于8421码加6 。

⑤余3码:8421码加上0011就对应数值的余3码。

2、格雷码

(1)概念:百度百科是这样说的:在一组二进制数的编码中,若任意两个相邻的二进制数只有一位二进制数不同,则称这种编码为格雷码。

·由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码

(2)二进制与格雷码的相互转换:这里的二进制不是只BCD码,就是自然的二进制。

①二进制转换为格雷码:

转换方法:

自然二进制的最高位与格雷码的最高位相同;然后从最低边一位起,依次将每一位与左边一位进行比较,相同取0,不同取1,(也就是异或运算)作为对应格雷码该位的值。

举例比较方便:

110010转换成格雷码:

过程图:

首先最高位是1,那么格雷码最高位是1;然后从最低位起跟左边一位进行比较;

最低位是0,它的左边一位是1,因此得到格雷码的最低位是1;

次低位是1,它的左边一位是0,因此得到次低位的格雷码是1;

次次低位0,它的左边一位是0,因此得到次次低位的格雷码是0;

...

次高位是1,它的左边一位是1(也就是最高位),因此格雷码的次高位是0;

这样就得到格雷码:101011 。

②格雷码转二进制码:

转换方法:

这个转换方类似,只不过是倒着回来;同样保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为最高位自然二进制码与次高位格雷码相异或(就是那个相同取0,不同取1),而自然二进制码的其余各位与次高位自然二进制码的求法相类似。

举例吧:

把格雷码101101转换成二进制数:

过程图:

转换过程不再详述。

(3)格雷码的特点

百度百科总结如下:

①格雷码属于可靠性编码,是一种错误最小化的编码方式。

·自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。

·格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。

·由于格雷码相邻的两个码组之间只有一位不同,因而在用于方向的转角位移量-数字量的转换中,当方向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性。

②格雷码是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。

③格雷码是一种变权码,每一位码没有固定的大小,很难直接进行比较大小和算术运算,也不能直接转换成液位信号,要经过一次码变换,变成自然二进制码,再由上位机读取。

④典型格雷码是一种采用绝对编码方式的准权码,其权的绝对值为2^i-1(设最低位i=1)。

⑤格雷码的十进制数奇偶性与其码字中1的个数的奇偶性相同。

3、ASCII码

(1)简介

ASCII(American Standard Code for Information Interchange美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。

(2)一个ASCII码用8位二进制表示。

只记录这些,详情自己Google或者百度吧。

4、其他编码

其他的编码,如奇偶校验码、循环冗余检验码(CRC)、汉明码、二维码、NRZ编码、霍夫曼编码、曼彻斯特编码等等这些编码在以后应用到的时候,再进行记录。

时间: 2024-10-27 18:39:17

(二)编码的相关文章

Thrift 基础教程(二)编码篇

上接Thrift 基础教程(一)安装篇,今天来介绍下Thrift的编码过程,首先通过命令行生成框架代码. 命令格式如下: thrift -gen language xxx.thrift 1.首先介绍下那个xxx.thrift文件,我们需要先创建myserver.thrift文件,这个接口主要定义服务接口和数据格式. 介绍一下thrift文件的语法格式,以我写的myserver.thrift说明. /** * thrift中的数据类型 * bool 布尔类型 * byte 同java里的byte

《软件工程》——编码

   编码的目的是使用选定的程序设计语言,把模块的过程描述翻译为用该语言书写的源程序.源程序应该正确可靠.简明清晰,而且具有较高的效率.在编程的步骤中,要把软件详细设计的表达式翻译成为编程语言的构造,编译器接受作为输入的源代码,生成作为输出并从属于机器的目标代码,然后编译器把输出目标代码进一步翻译成为机器代码,即真正的指令.   一. 导图分析   二.编码的过程与原则    (1).选择合适的语言:  实现一个大型的软件开发,可能需要选择一种或几种程序设计语言来完成.语言选择合适,会使编码困难

JAVA基础学习day22--IO流四-对象序列化、管道流、RandomAccessFile、DataStream、ByteArrayStream、转换流的字符编码

一.对象序列化 1.1.对象序列化 被操作的对象需要实现Serializable接口 1.2.对象序列化流ObjectOutputStream与ObjectInputStream ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化. ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的

文件的base64编码与解码操作

一,前提 1.有一个demo.json文件. 2.在终端操作. 二,编码 1.打开终端,cd到demo.json文件的当前文件夹. 2.输入命令:base64 demo.json -o demo64.txt,然后回车. 3.open demo64.txt. 三,解码 1.打开终端,cd到demo64.txt文件的当前文件夹. 2.输入命令:base64 -D demo64.txt -o demoNew.json,然后回车. 3.open demoNew.json,总结:demoNew.json与

《软件project》——编码

   编码的目的是使用选定的程序设计语言,把模块的过程描写叙述翻译为用该语言书写的源程序. 源程序应该正确可靠.简明清晰,并且具有较高的效率.在编程的步骤中,要把软件具体设计的表达式翻译成为编程语言的构造,编译器接受作为输入的源码.生成作为输出并从属于机器的目标代码,然后编译器把输出目标代码进一步翻译成为机器代码,即真正的指令.   一. 导图分析   二.编码的过程与原则    (1).选择合适的语言:  实现一个大型的软件开发,可能须要选择一种或几种程序设计语言来完毕.语言选择合适,会使编码

Shannon-Fano-Elias编码的C语言实现

Shannon-Fano-Elias编码 一.理论分析 Shannon-Fano-Elias编码是利用累积分布函数来分配码字. 不失一般性,假定取X={1,2,-m}.假设对于所有的x,有p(x)>0.定义累积分布函数F(X)为 其函数图形见下图所示,修正的累积分布函数为其中表示小于x的所有字符的概率和加上字符x概率的一般得到的值.由于随机变量是离散的,故累积分布函数所含的阶梯高度为p(x).函数的值恰好与x对应的那个阶梯的中点. 我们现在要确定的唯一性,这样才能保证可以对应到相应的x.因为所有

使用mysql的SUBSTRING_INDEX函数解决项目中编码非重复问题的实现方案!

一 SUBSTRING_INDEX函数介绍 作用:按关键字截取字符串 substring_index(str,delim,count) 说明:substring_index(被截取字段,关键字,关键字出现的次数) 例:select substring_index("她说,我是个好人,怎么办",",",2);结国如图: 会从关键字第二次出现的位置开始截取. 但是如果次数是负数,则会从后往前截取,比如 从后面开始到,第二次出现的位置往前截取,这样就为编码方式提供了很好的

day06 --编码及知识点补充

一,is和==的区别 1,id :通过id我们可以查看到一个变量表示的值在内存中的地址 用id()表示,括号里面放的是想要查看地址的变量 字符串的数据地址是一样的,列表的数据地址是不一样的 s = "alex" print(id(s)) #4434277576 s = "alex" print(id(s)) #4434277576 lst = [1,2,3] print(id(lst)) #4520564552 lst1 = [1,2,3] print(id(lst

python之is 和 == 的区别//编码和解码

一.is  和  ==  的区别: ==   比较    #比较两边的值 is    比较   #比较的是内存地址 id()是python的一个内置函数,通过id()我们可以查到一个变量表的值在内存中的地址 (只限于数字和字符串是True) #数字小数据池 :    -5~256 1.字符串中如果有特殊字符,那么不会添加到小数池中,他们的内存地址就不一样 字符串中单个*20以内他们的内存一样,超过20个就不会添加到小数据池;单个*以上内存地址就不一样 注意:pycharm是个坑,一个py文件中所

Python基础知识初识 (二)

Python基础知识初识 (二) 编码初识 1.ASCLL 计算机: 计算机存储文件,存储数据,以及将一些数据信息通过网络发送出去,存储发送数据什么内容?底层都是01010101 计算机创建初期,美国,是7位一段,但是发明者说为了拓展,留出一位,这样就是8位一段句.8位有多少种可能 ?256种 编码相当于密码本,最早的密码本: ASCII码:只包含:英文字母,数字,特殊字符. 0000 0001 : a 0000 0101 : b 8bit (位)== 1byte(字节) 'hello123':