第一章 数制与编码
1.1 数制
数制是计数的方法,通常采用进位计数制
在进位计数制的多位编码中,数制是:
每一位的构成方法,以及
从低位到高位的进位规则。
常用的数制:
二进制(Binary)、
八进制(Octal)、
十进制(Decimal)、
十六进制(Hex-decimal)。
例如:十进制:
每一位——十进制数由0~9个数字符号(数码)和小数点组成,
进位规则——“逢十进一”(基数为10)。
1.1.1 记数法和分析方法
记数法——位置记数法
分析方法——按权展开式
例如:十进制数
(652.5)10=6×102+5×101+2×100+5×10-1
左边为“位置记数法”,右边为“按权展开式”。
代数式为:
说明:每一个数位上的数码有不同的权值
权值从左到右以基数的幂次由大到小,
数位从左到右由高位到低位排列。
例如:二进制数
(101.11)2 = 1×22+0×21+1×20+1×2-1+1×2-2
任意进制(基数为R)记数法:
八进制和十六进制的按权展开式以此类推。
1.1.2 数制转换
数值相等,记数方法(数值)不同的数之间的转换。
数制转换的本质是——权值的转换。
1.1.2.1 任意进制到十进制的转换
利用任意进制数的按权展开式,可以将一个任意进制数转换成等值的十进制数。
例如:
(1011.01)2 =1×23+0×22+1×21+1×20+0×2-1+1×2-2=(11.25)10
例如:
(8FA.C)16=8×162+F×161+A×160+C×16-1=2048+240+10+0.75=(2298.75)10
1.1.2.2 “十二”进制转换
考查整数部分,数的二进制按权展开式:
设:(D)10可以由n位二进制数表示,即 (D)10=(kn-1kn-2,…,k1k0)2
存在:
(D)10=kn-1×2n-1+kn-2×2n-2+…+k1×21+k0×20
(D)10/2= kn-1×2n-2+kn-2×2n-3+…+k1×20 + k0 / 2
((两个负数的补码相加D)10/2商的整数部分)/2= kn-1×2n-3+kn-2×2n-4+…+k2×20 + k1 / 2
“孤立”余数后,整数的商再除以基数2,依次类推;余数依次为从低到高位的二进制数位。
故而,十进制整数转换为二进制数,采用“2取余”法。
1.1:将(173)10转换为二进制数
考查纯小数部分——将十进制纯小数转换为二进制数
设:(D)10=k-1×2-1+k-2×2-2+…+k-(m-1)×2-(m-1)+k-m×2-m
存在:
(D)10k-1 +k-2×2-1+…+k-(m-1)×2-(m-2)+k-m×2-(m-1)
“孤立”整数部分,小数部分再乘以基数2,依次类推。
故而,十进制小数部分转换为二进制数,采用“2取整”法。
1.2:将(0.6875)10转换为二进制数
1.3:将十进制转换成二进制——(219.723)10
思考:转换误差为多少?考虑最低有效位对应的权:2-mm是保留的位数,若要保持原数据的精度,二进制小数位的位数应保留几位?
1.2.3 “二十六”进制转换
由于4位二进制数恰好代表0~15共16种取值,而且将4位二进制数看作一个整体时,它的进位输出恰好是逢十六进一,所以采用“分组对应”法。
例如:将(1011101.101001)2转换为十六进制数
从小数点,
整数部分从低到高4位一组,最高一组如不足4位高位以0补齐;
小数部分从高到低4位一组,最低一组如不足4位低位以0补齐。
(  101 1101.1010 0100  )2
所以,(1011101.101001)2=(5D.A4)16
1.1.2.3 “十六二”进制转换
采用“等值代替”法。
例如:(8FA.C6)16=( 1000 1111 1010 . 1100 0110 )2=( 100011111010.1100 011)2
1.1.2.4 小结
二进制、十六进制、八进制 数之间的转换方法为:(图1. 1)
图1. 1 进制之间的转换方法
其中,十进制到二进制的转换:
整数部分:除2取余,
纯小数部分:乘2取整。
1.1.3 二进制正负数的表示及运算
1.1.3.1 二进制四则运算
加法: 1+1=0 进位1,逢二进位;
减法: 0-1=1 借位1,逢二借位;
乘法: 1×1=1,0×1=0;多位乘法,结合加法;
除法:多位除法,乘法结合减法。
1.1.3.2 二进制正负数的表示
1.1.3.2.1 原码
对于给定的字长,最高位为符号位,表示正负号:
0 —— 正,
1 —— 负,
其余各位表示数的绝对值。
例如:设8-bit(含符号)字长,
[(+43)10]=(0 010 1011)2=(2B)16
[(-43)10]=(1 010 1011)2=(AB)10
正数的无符号和有符号的表示方法相同,正数的原码是它本身。
1.1.3.2.2 反码
负数的反码是对其绝对值正数的编码(正数原码)求反。
方法1:对绝对值位域求反;符号为:正数原码为”0”,则负数反码为”1”;
方法2(推荐):对整个码字逐位取反。
例如:
[(+25)10]=(0 001 1001)2=(+19)16
[(-25)10]=(1 001 1001)2
[(-25)10]=(1 110 0110)2
1.1.3.2.3 补码
计算补码的方法1——“反码加一”,确切地说是:
给定某数,若已知相反符号数的二进制编码(有符号数的补码编码,对于正数,补码编码与原码编码相同),将相反符号数的码字含符号位逐位取反,然后从最低位加上1。这也是求相反符号数补码的方法。
特例:对于0的取相反符号数的操作。例如,设字长4 bit,则有:
(0000)2  (取反)  (1111)2 (+1)  1  0000
补码的性质:“0”的补码编码是唯一的。
可以用补码表示有符号的定点数,例如:(设:含符号位字长为8-bit)
(+25)10 = (0 001 1001)2 (取反) [(1 110 0110)2] (+1) [(1 110 0111)2]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。