微机原理之计算机中的数制和编码
1. 无符号数的表示及运算
十进制,二进制,十六进制
注意:十六进制计数法是为了克服二进制计数法书写麻烦而引入的一种进位计数制;在编写汇编语言源程序时,如果一个十六进制数的最高位为A~F中的一个数字符号时,该数前面必须加0,以与变量名区别;不论数据以什么数制表示,最终在计算机内部都将以二进制形式表示。
1. 2 各种数制的相互转换
1. 任意进制数转换为十进制数
2. 十进制数转换成二进制数
(1) 整数部分的转换
除以基数(2)取余数,先为低位 后为 高位
(将余数按照从下到上的顺序书写即可)
显然,该方法也适用于将十进制整数转换为八进制整数(基数为8)、十六进制整数(基数为16)以至于其它任何进制整数。
(2) 小数部分的转换
小数部分乘以基数(2)取整数(0或1),先为高位 后为 低位。
显然,该方法也适用于将十进制小数转换为八进制小数(基数为8)、十六进制小数(基数为16)以至其它任何进制小数。
3. 二进制数与十六进制数之间的转换(四个二进制为一个十六进制)
4. 二进制数的运算
二进制数的算术运算
(1) 加:0+0=0 0+1=1 1+0=1 1+1=0(进1)
(2) 减:
0-0=0 1-1=0 1-0=1 0-1=1(借位)
(3) 乘:
0x0=0 0x1=0 1x0=0 1x1=1
(4) 除: 二进制除法是乘法的逆运算。
- 二进制数的逻辑运算
与,或,非。。。。
2. 带符号数的表示及运算
用二进制数的最高位表示数的符号。对于一个字节型二进制数来说,D7位为符号位,D6~D0 位为数值位。在符号位中,规定用“0”表示正,“1”表示负,而数值位表示该数的数值大小。
把一个数及其符号位在机器中的一组二进制数表示形式,称为“机器数“
机器数所表示的值称为该机器数的“真值”
2.1 原码
最高位为符号位(正数为0,负数为1),其余数字位表示数的绝对值。
说明:0”的原码有两种表示法:00000000表示+0,10000000表示-0
2.2 反码
在原码的基础上,符号位 1 不变(仍为1) ,其他位依次取反
说明:“0”的反码有两种表示法:00000000表示+0,11111111表示-0。
2.3 补码
负数的补码是在原码基础上,符号位不变(仍为1),数值位按位取反,末位加1;
或在反码基础上末位加1
说明1.:计算机中都用补码表示
2. 负数的符号位不变,右边从第一个不为0的数开始,中间取反即可得到源码的补码。
位数\表示范围 | 原码 | 反码 | 补码 |
---|---|---|---|
8位 | -127~+127 | -127~+127 | -128~+127 |
16位 | -32767~+32767 | -32767~+32767 | -32768~+32767 |
说明:1.正数的补码与其原码、反码相同
2.3.1 补码的加减运算
- 补码加法
不论被加数、加数是正数还是负数,只要直接用它们的补码直接相加,当结果不超出补码所表示的范围时,计算结果便是正确的补码形式。但当计算结果超出补码表示范围时,结果就不正确了,这种情况称为溢出。
2.4 计算机中带符号数用补码表示时有如下优点:
- 可以将减法运算变为加法运算,因此可使用同一个运算器实现加法和减法运算,简化了电路。
- 无符号数和带符号数的加法运算可以用同一个加法器实现,结果都是正确的
2.5 溢出及其判断方法
判断溢出的方法很多,常见的有:
- ① 通过参加运算的两个数的符号及运算结果的符号进行判断。
- ② 单符号位法。该方法通过符号位和数值部分最高位的进位状态来判断结果是否溢出。
符号位进位状态用CF来表示,当符号位向前有进位时,CF=1,否则,CF=0;数值部分最高位的进位状态用DF来表示,当该位向前有进位时,DF=1,否则,DF=0。单符号位法就是通过该两位进位状态的异或结果来判断是否溢出的。
OF = CF 异或 DF
若OF=1,说明结果溢出;若OF=0,则结果未溢出。也就是说,当符号位和数值部分最高位同时有进位或同时没有进位时,结果没有溢出,否则,结果溢出。
- ③ 双符号位法,又称为变形补码法。它是通过运算结果的两个符号位的状态来判断结果是否溢出。
3. 信息的编码
1. 二进制编码的十进制数(BCD编码)
分为压缩型和非压缩型
压缩型 非压缩型
86 10000110 00001000 00000110
将这种BCD码送计算机进行运算,由于计算机总是将数当作二进制数来运算,所以结果可能出错,因此需要对计算结果进行必要的修正,才能使结果为正确的BCD码形式 。