[数电计组]第二节:二进制编码

计算机外部信息和内部数据的表示:

外在的多媒体信息是连续的,可以对离散样本用0、1编码以使信息离散化,这样便可以在后续运算中处理。

计算机内部信息都用二进制编码。原因:

(1)制造两个稳定态的物理器件容易

(2)二进制编码、计数、运算规则简单

(3)正好与逻辑命题相对应,便于逻辑运算,并可方便地用逻辑电路实现算术运算。

机器数 :用0和1编码的计算机内部的0/1序列
真值 :机器数真正的值,即:现实中 带正负号的数
进位计数制:用一串数字表示一个 ,每个数字的位置对应一
权重 ,该数的值就等于所有数字按权展开后相加的和。
某一数制下的数据:
最高有效数字:most significant digit(MSD)
最低有效数字:least significant digit(LSD)
二进制数中,最左边的位称为最高有效位MSB,最右边的位称为最低有效位LSB
度量单位:bit,Byte,KB,MB,GB,TB,PB

进位计数制:

八进制数,取0~7,逢8进1,后缀“O”表示八进制数。
十六进制数,取0~9,A~F。常用前缀“0x”或后缀"H"表示十六进制数。
二进制对应字母B,十进制对应D

进位数制之间的相互转换:

二进制转八进制、十六进制:分组对应法,按照小数点为分界线,前、后按照器对应的二进制转换位数进行处理。
A进制转B进制:
整数部分:除以基数取余数,写到最后一个小于基数的数后,把余数倒着写一遍,第一个余数对应的是MSB,而最后一个余数对应的是LSB。
小数部分:乘以基数取整数,取了整数后,将小数部分剩余的数据保留,重复进行数值转换的操作。即,继续反复乘以基数,然后记录整数部分。当小数部分为0或者达到最大有效数字后,就停止算法。且将刚刚得到的整数部分按照得到的先后顺序正序排列,就得到小数部分的数位表示。
当然,有的时候小数的转换是存在误差的。对于一些数,无论怎么乘基数都是由无限不循环小数,这个时候先根据精度预处理出需要进行基数乘法的次数,然后到达次数之后再终止计算即可。

数值型数据的编码表示:

什么是定点数? - 知乎

数值数据表示的三要素:进位计数制、编码格式、定浮点表示
有四类定点数的编码,可以解决正负号的问题:原码、反码、补码、移码
定点整数,有无符号/有符号整数
定/浮点表示,解决小数点问题,需要考虑定点整数和定点小数
浮点数:可用一个定点小数(尾数)和一个定点整数(阶码)来进行浮点数的表示。

原码:

一个数是由符号位和数值位两部分构成的。最高位代表一个符号位,正数符号位为0,负数符号位为1.

特点:

(1)负整数与正整数的个数相同,唯一区别在于符号位。2^(n-1) -1个正负数。

(2)0的表示并不唯一,有两种表示形式,不利于程序员编程。有1+0000,或0+0000

(3)需额外对符号位运算进行处理,不利于硬件设计。

(4)难以实现出现负数的运算。

在浮点数表示标准中,浮点数的尾数用原码表示。

补码:

模运算系统中的数值表示。若一个数x是负数,那么其在模系统下的补码为:x + mod。

对于正数,其补码就是原码。而对于负数,其补码为:用全1的二进制数,减去负数的绝对值部分。也就是:2^n - 1 - 负数的绝对值。等价于11111... - 负数的绝对值。即对负数的绝对值部分取反,然后再+1。

结论1:一个负数的补码等于模减该负数的绝对值。

结论2:对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。

在补码所在的模运算系统中,减法也可以用加法实现。如-3-3 = -3 + (-3),这样实现了加减法运算的统一。

结论3:n位数B的补码为2^n - B。若B范围为1~2^n - 1,则2^n - B的范围也是1~2^n-1。若B=0,则补码为2^n,共n+1为,最高位舍弃,还是0.

补码的计算:2^n - B = 2^n - 1 - B +1 相当于把B的每一位取反后再加1 无需减法运算

补码的最高位MSB用作 符号位 ,等于 1时表示负数 ,且其权重
-2 n-1 ,n-1位 数值位
因此,补码表示下的最小的负数为10000....只有最高符号位为1,代表是-2^(n-1),若下面绝对真值部分有数,则需要加上一部分数据,会使负数的绝对值变小。
补码表示范围为:-2^(n-1)~2^(n-1)-1。因为正数部分需要多表示一个0,则负数最终的表示数目要多一个。
正数的补码:符号位0+数值位。负数的补码:符号位1+数值位按位取反后+1
结论4:一个数连续求两次补,最后得到的是它自己。
大多数计算机和数字系统采用补码来表示数值。
举例:求-123在8位二进制数下的补码:
-123是负数,先求其原码:11111011。然后,最高位符号位1保留,接着对负数绝对值部分求反后加一。10000100 + 1 = 1000101。
求特殊数的补码,假定机器数有n位。
[-2^(n-1)] = 1000....0
[-1] = 111....1
[+0] = [-0] = 2^n - 0 = 2^n 一共有n+1位数,最高位将被舍弃。所以还是0000....0
其实,上述过程中,已经计算了反码。n位数B的反码就是,从2^n - 1中减去B。可以通过对B的每个数位逐位取反来实现。正数的反码由符号位0+数值位表示。负数的反码由符号位1+数值位逐位取反表示。
反码具有对称性,0由两种不同的表示形式。0000...0和100...00,反码可表示的数据范围是:-(2^(n-1)-1)~2^(n-1)-1

余码、移码、偏置码

直接在原有的编码中加上偏置值B来表示,即X+B,这种编码方法称为余码、移码、偏置码。

余B码表示范围由[-2^(n-1),2^(n-1)-1]变为[-2^(n-1)+B,2^(n-1)+B-1]

一般来说,编码位数为n的时候,偏置数取2^(n-1)

余3码,是一种自反码。每位取反可得到反码。

为什么用补码表示带符号整数
(1)补码运算系统是模运算系统, 加、减运算统一 符号位直接参与运算
(2)数 0的表示唯一 ,方便使用
(3)比原码和反码 多表示一个最小负数
(4)与移码相比,其符号位和真值的符号对应关系清楚
一般在全部是正数运算且不出现负值结果的场合下,可使用
符号数表示 。例如,地址运算,编号表示,等等。
无符号数的编码中 没有符号位
能表示的最大值 大于 位数相同的带符号整数的最大值(Why?)
例如,8位无符号整数最大是255(1111 1111)
而8位带符号整数最大为127(0111 1111)
总是整数,所以很多时候就 简称为“无符号数”
若同时有无符号和带符号整数,则C编译器将带符号整数强制转换为无
符号数

浮点数的表示:

什么是浮点数? - 知乎

浮点数的规范表示中,M(Mantissa)被称为浮点数的 尾数 ,R(Radix)被称为阶码的 基数 ,E(Exponent)被称为阶的 阶码 。

IEEE754浮点标准形式V=(–1) s x M x 2 E
符号位S (Sign):表示数的正负,正数(s=0),负数(s=1) 。
尾数M (significand):是一个二进制小数,范围在[ 1.0
2.0 )(前提是规范化的前提,若阶码为全0或全1,则尾数是0~1之间的数据)
阶码E (exponent):表示浮点数的权重,权重是2的E次幂。本来可以表征负的幂次,加上偏置值2^(k-1)-1之后就能够得到无符号范围下的阶码。
阶码编码exp:规定阶码为 无符号数 ,既不全0又不全1。阶码
全0或全1为 非规格化浮点数
阶码编码exp:表示为阶码E的偏置(biased)形式, exp =E+
Bias,称为余码或偏置码,使得数值大于0。
exp:无符号数
偏置Bias=2^( k-1) -1, k为阶码的位宽
单精度:127 (Exp: 1…254, E: -126…127)
双精度: 1023 (Exp: 1…2046, E: -1022…1023)
小数字段frac表示尾数M的编码M= 1 .xxx…x 2
xxx…x: 小数字段数值
最小值:000…0 (M = 1.0)
最大值:111…1 (M = 2.0 – ε)
浮点数表示的非规格化情况:
一、阶码编码 exp 等于全 0 表示数值非常小。
阶码编码exp: E =1 – Bias 
小数字段 frac 表示尾数 M 的编码 M= 0 .xxx…x2  (尾数最高位隐含为0 , 非规格化小数字段M小于1)
xxx…x: bits of frac
Exp= 000…0,frac= 000…0
表示数值为0
有正负0区分
Exp= 000…0,frac ≠ 000…0
数值非常接近于0
注:阶码全0的情况,则不为规格化情况,那么尾数前面的隐藏位就消失了。
二、阶码编码exp 等于全1
Exp= 111…1, frac= 000…0
表示数值为
当两个非常大的数相乘或 除数为0 时,表示数据溢出
1.0/0.0 = −1.0/−0.0 = + , 1.0/−0.0 = −
5+(+∞) = +∞
Exp= 111…11, frac ≠ 000…0
表示NaN,非数(Not a Number)
一些运算结果不能是实数或无穷,就会返回该值
例如: sqrt(–1), ,   0, 0/0,∞/∞
注:阶码全1,尾数部分1全0,则表示数值正无穷。尾数全0,则非数(/0,%0,sqrt(-1))

偏移量:本身与阶码的位数是相关的。假设预留出n位来存储阶码,那么阶码本身是无符号整数,则需要加上一个偏移量K = 2^(n -1)-1,这样就能表示出负的指数来。如n = 8时,阶码可以表示0~255范围内的数;需要加上偏移量K = 2^7 - 1 = 128 - 1 = 127。这样就可以实现负数的表示了。所以,这个偏移量应当阶码表示范围的中间量。比如初始的指数E= - 120,那么加上偏移量2^7-1 = 127之后,E+B = 7,可以用一个无符号数进行表示了。所以,偏移量的效果就再此,使得指数为负的情况下,能够转移成无符号整数存储阶码。

(类比桶排序的时候,存在输入数据为负的情况,此时加一个偏移量就能使数组下标保持合法了)


隐藏位:由于尾数M的最高位总是1,所以为了扩大尾数的位宽提高精度,可以将尾数的最高位隐藏起来。这样单精度 23 位尾数可以表示了 24 位有效数字,双精度 52 位尾数可以表示 53 位有效数字

值得注意的是,在位宽一定的前提下。若阶码的位宽增大,在符号位不变的情况下,势必会造成尾数的位宽减少。也就是浮点数表示的范围增大,而精度降低;同时,若尾数的位宽增大,则阶码的位宽减小,浮点数表示的精度增大,而表示的范围减小。所以,不论阶码定义成了无符号整数,还是尾数的隐藏位设置,其根本目的是在提高精度、扩大浮点数的表示范围。

在浮点数的运算过程中,为了使浮点数的表示具有唯一性,需要进行规格化操作:

面试问题:二进制数10110001的值是多少? 不要不知道,下一步问:无符号数、二进制原码、补码、反码、八位浮点数表示。

十进制数的二进制编码表示

二进制数可以用来表示10个十进制数码。

至少需要四位编码,有很多种不同方法。可分为有权码和无权码;其中最自然的编码是8421BCD码。以四位2进制数0000~1001表示0~9这10个数码。

有权码,权重值分别是2的幂次;

余三码:相加等于模系统的,互为反码,称为自反性。

问题:2421BCD码,5的表示1011,这两个1的使用是否有区别?为什么不能用0101呢?

非数值型数据的编码表示

数据非数值数据的表示:逻辑数据、西文字符、汉字;动作和状态编码;

数据的宽度;

数据的存储排列:大端、小端方式。

逻辑数据的编码表示

用1位表示,如1真0假。N位二进制数可以表示N个逻辑数据,或一个位串。

位串

西文字符的编码表示

用ASCII(American Standard Code for Information Interchange)

需要记忆一下大写字符、十进制数对应的ASCII码。常见的ASCII码。

汉明码_百度百科

两个码元对应位不同的个数,就叫做汉明码之间的距离。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值