数制和码制(后期可能有更新)

  数字电路是数字IC设计的基础,而数制和码制往往又是数字电路的基础,因此数制和码制是数字IC设计基础的基础。在这里,我将记录关于数制与码制的一些主要知识点,有些知识点我是学了数电半年或者一年之后才发现,原来数电还有这样子的东西,于是整理在这里,仅供参考,有误请评论指出。

一、数制

  这里不进行记录什么二进制、十进制之类的基本概念,只介绍一些主要的知识点。

  1、数制之间的转换

(1)关于二进制的一些概念

  这里主要记录一下位、比特对于二进制的描述,是比较基础的东西。

  位宽/比特:一个二进制数,有它的位宽,有多少个0/1,它位宽就是多少;比如二进制数10110,它的位宽就是5,从第0位到第4位;也说这是一个5位宽的二进制数,或者说这个二进制数宽度大小是5比特,数值大小为22(默认数值大小一般说的是十进制的数值大小)。

  最高位和最低位:对于上面的10110,最高位是1,最低位是0;最高位是第4位,最低位是0

(2)二进制转换成十进制:

  ①二进制转换成十进制方法为:把二进制数按权展开、相加即得十进制数。

  ②举例:二进制数10011.01,位数为1的有第4位,第1位,第0位,第-2位,那么就有:

  10011的十进制数值(注意说到数值,默认是转换为十进制时数的大小)为:2^4 + 2^1 + 2^0 + 2^(-2) = 19.25

十进制转换成二进制:

  ①转换方法就是:整数部分,除二取余;小数部分,乘二取整(小数部分一般会说明要精确到小数点多少位)。

  ②举例说明:将35.63转换成二进制数,小数部分精确到小数点后3位

  那么对于整数部分,除二取余

        

整数部分的二进制数就是100011。

  对于小数部分:乘二取整

  0.63*2 = 1.26,取1;0.26*2 = 0.52,取0;0.52*2 = 1.04,取1;已经达到三位了。因此小数部分就是101

因此35.63的二进制表示为100011.101。

(3)二进制转换成八进制:

    ①方法:从小数点向两边展开,每三位二进制划分为一组,每一组的的十进制就是对应的八进制,(注意,最高位或者最低位不够3位要补0)。

  ②举例:1001.01转换成八进制,进行分组 (00)1 001 . 01(0),转换成八进制就是11.2。

八进制转换成二进制:

  ①八进制转换成二进制的方法跟二进制转换成八进制的方法相反,一位八进制对应三位的二进制,依次展开就可以。

  ②举例:八进制67.21转换成二进制,6是110,7是111,2是010,1是001;所以对应的二进制就是110111.010001。

(4)二进制转换成十六进制,十六进制转换成二进制:

  二进制转换成十六进制/十六进制转换成二进制与八进制的类似,只不过是八进制对应的是3位,而十六进制对应的是4位;这里不再详述。

它们之间的转换都可以通过二进制进行。

  2、二进制的有符号与无符号

(1)无符号数,也就是没有正负之分,默认为正值,上面说到的都是正数,也就是无符号数。对于二进制也是这样。

  ·一般情况下,没有专门指出这个数是有符号的,就默认是无符号的数。

  ·n位无符号可以表示的范围位0~+(2^n-1),即0~1...1

(2)有符号数,顾名思义就是有正负之分,比如+39,-49。对于二进制数而言,也有有符号数之分。以后我记录的说到有符号数的,默认指有符号数的二进制数。

  在有符号的二进制数中,最高位表示符号位,其他位表示数的其他内容;其中符号位是1时,表示这个有符号的二进制数是负数;符号位是0时,表示这个有符号的二进制数是正数。

比如有符号数10010,最高位是1,表示这个二进制数是负数。(当然要注意下面要讲到的反码)

    ·从前面上述可以知道,一个有符号的二进制数,至少有两位,其中一位是符号位。

  有符号二进制数有三种表达方式:原码、反码、补码(十进制之类的也有补码之类的,这里仅仅记录与二进制有关的)。

  ③原码:最高位是符号位,除最高位后的二进制数,表示二进制数值的绝对值大小。

比如原码100110,最高位是1,表示负数;剩余是00110,表示的数值大小是6,那么这个原码表示的数值大小就是-6 。

    ·一般情况下,说到是有符号数,一般指的是原码。

    ·原码的0,可以表示为+0和-0,也就是1...0,0..0,因此有两种表达形式。

    ·n位原码表示的范围为:-(2^(n-1)-1)~+(2^(n-1)-1),即1...1~0...1

  ④反码:反码可以由原码出发得来,将原码的每一位都取反就得了对应的反码。

  比如一个有符号数的原码是10011,那么这个有符号数的反码就是01100.

·反码在应用不多,也许是我还没有了解到吧,在此不详述,以后用到了再详述记录吧。

  ⑤补码:补码的应用就广泛了,计算机的内部运算就是用补码的。

  补码也可以由原码得来:

    对于正数:补码即为补码;

    对于负数:原码的符号位不变,剩余位取反,然后整体加一就得到了补码。

  比如:二进制的原码是10010,符号位1不变;剩余0010,取反得1101;整合为11101,加一得到11110.也就是原码是10010的补码为11110 。

  ·补码的0,假设有4位,那么对于-0,原码是1000,进行取反加一后,得到0000(假设位宽固定);对于+0,补码也是0000;因此补码的0只有一种表达形式。

  ·n位补码表示的数值范围为:-2^(n-1)~+(2^(n-1)-1)

  

  3、二进制的加减运算与溢出现象

(1)二进制的加减运算

  ①对于一般的无符号运算,直接运算就好了,没什么可以说的。但是计算机内部,它是用补码运算的,这就有可以记录的地方了,补码的加减运算对于其他的有符号数,就显得比较简单了。此外,减法也可以当成加法来,减一个数可以当成加这个数的负数。

  ②对于补码的加法运算有:补码 + 补码 = 补码。当然这个是有一定的条件的,下面举例探讨。

  ③例一:(+3) + (+4),结果显然是+7;用二进制补码进行运算,则是0011+0100,得到的结果是0111,很显然,0111是+7的补码。

例二:(-2) -6 = (-2)+ (-6),结果显然是-8;用二进制补码进行运算,则是1110 + 1010 ,得到11000,这个很显然也是-8的补码。

例三:+6 - 3 = (+6)+ (-3),结果显然是+3;用二进制补码进行运算,则是0110+1101,结果是10011,诶呀,这个很显然就不是+3的补码,但是,当我们去掉最高位后,只看低四位0011,这个很显然是+3的补码呀。

例四:+4-7 = (+4)+(-7),结果是显然是-3;用二进制补码进行运算,则是0100+1001,得到的结果是1101,这个结果很显然是-3的补码。

(2)溢出现象

 ①经过上面的四个例子,引入溢出这个概念:如果加法操作产生的几个超出了数制定义的范围,就说发生了溢出。两个异号数相加,肯定不会溢出;同号相加可能溢出。

  ②判断溢出的法则:如果加数的符号相同,而和的符号与加数符号不同,则有加法溢出。

  ③再谈前面的四个例子:

一般而言,对于位宽固定的情况下,

    例一相加,得到的是4位,没有溢出,结果也正确。

    例二,虽然得到的结果正确,但是得到的结果是5位的,如果截去最高位,那么得到结果将是错误的,也就是有溢出产生。这里也提醒我们,对于同号相加,要加多一位,其实也就是加多一个进位位。

    例三结果虽然是不正确的,但是这是5位的结果,我们截去最高位,这个结果是对的,因此这个没有溢出,也就是这个结果(四位)还是对的。

    例四,没有溢出。

二、编码

第二篇记录一下编码。

  编码:用于表示不同的数或其他事件的一组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-10 05:39:16

数制和码制(后期可能有更新)的相关文章

第一章 数制和码制

1.数字电路:工作在数字信号下的电子电路称为数字电路. 2.自然界中形形色色的物理量,就其变化规律的特点而言,可以分为两大类:(数字量)数字信号和模拟量(模拟信号). 3.数字量:物理量的变化在时间和数量上都是离散的,也就是说它们的变化在时间上是不连续的,总是发生在一系列离散的瞬间.而且,它们数值的大小和每次的增减变化都是某个最小数量单位的整数倍,而小于这个最小数量单位的数值没有任何物理意义. 4.模拟量:物理量的变化在时间或数值上是连续的.而且,物理量在连续变化过程中的任何一个取值都有具体的物

第一章:数制和码制

数制 一. 十进制 进位规则是“逢十进一”.任意一个n位整数.m位小数的十进制可表示为: 其中 ki-称为数制的系数,表示第i位的系数,十进制ki的取值为0 ~ 9十个数, i 取值从 (n-1)-0的所有正整数到-1--m的所有负整数 10i-表示第i位的权值,10为基数,即采用数码的个数 n.m-为正整数, n为整数部分的位数, m为小数部分的位数 例如 (249.56)10=2×102+ 4×101+ 9×100+ 5×10–1+ 2×10-2 二. 二进制 进位规则是“逢二进一”,任意一

机器数与码制(如何在计算机内部存储数字)

机器数 机器数 各种数据在计算机内部的表示和存储形式称为机器数. 特点: 采用二进制计数: 数的符号(正负)用“0.1”表示: 小数点隐含表示二不占位置. 机器数的真值 机器数所对应的实际数值. 机器数的分类 无符号机器数和带符号机器数. 无符号机器数 无符号(无正负号)机器数表示正数,没有符号位. 码制 原文地址:https://www.cnblogs.com/victoryluyun/p/11086962.html

小数在计算机中为什么会有误差?说明机器数、码制、浮点数、以及数制转换的一些问题

1.常用的数制 十进制  0~9 八进制 0~7 二进制 0~1 十六进制 0~F 2.十进制 转 各个进制 方法 : 除以基数取余反向 3. 2进制  8进制  16进制 转十进制 二进制 ___________________________ 2^3     2^2    2^1     2^0 1         0          0         1         X =8+ 1 = 9 八进制 ———————————-------------- 8^1    8^0 1    

高并发 WEB 服务器 nginx 源码通读中文分析注释,带详细函数注释及函数调用注释,附 github 地址,后期持续维护更新

github地址:https://github.com/y123456yz/reading-code-of-nginx-1.9.2 对源码通读注释,函数进行了详细注释.同时对相关功能进行了优化,日志功能分析能力更易懂. github 地址下载: https://github.com/y123456yz/reading-code-of-nginx-1.9.2 或者在 github 官网搜索 reading-code-of-nginx-1.9.2

数制与进制转换

计算机与程序设计中,我们常见的数制有二进制(B),八进制(O),十进制(D)和十六进制(H). 二进制数:(以0B开头) 二进制数又称机器数,在机器的世界里,只认识0和1,二进制数就使用0和1来表示.一般来说二进制数很容易区分和判断,因为二进制数哪怕一个非常小的数都非常长,有时候我们习惯从右往左,每四位数空格分隔,这样易于辨识数的大小.如:14用二进制来表示可以写作111025用二进制表示可以写作0001 1001(或11001)转换方法如下:如图十进制的123转成二进制就是1111011,其实

【源码分享下载】每日更新之Android应用源码比较不错的新闻客户端

Android应用源码比较不错的新闻客户端 服务分类: 其他 使用服务: 其他 功能分类: 新闻 支持平台: Android 运行环境: Android 开发语言: Java 开发工具: Eclipse 源码大小: 4.11MB 下载地址:http://www.devstore.cn/code/info/95.html 源码简介 本项目是一个挺不错的新闻客户端项目源码,本项目中,启动引导.登录注册.用户中心列表显示.文章分页.下拉刷新.文章收藏.更新反馈等新闻客户端常见的功能都有,项目分层合理,

【源码分享下载】每日更新之Android快速开发框架LoonAndroid

Android快速开发框架LoonAndroid 服务分类: 其他 使用服务: 其他 功能分类: 其他 支持平台: Android 运行环境: Android 开发语言: Java 开发工具: Eclipse 源码大小: 14.65MB 源码下载地址:http://www.devstore.cn/code/info/74.html 源码简介 主要有以下模块: (1) 自动注入框架(只需要继承框架内的application既可) (2) 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)

nginx源码学习资源(不断更新)

nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没有注释,完全没有配置文档的代码. 现在你最希望要的是一份注释版的nginx源码,可以从下面的链接中下载一份: https://github.com/jianfengye/nginx-1.0.14_comment 这份注释版源码会不断进行更新的 好了,第一个问题, nginx的main函数在哪里呢?