计算机中的数制和编码
·常用数制 ----二,十,十六进制
数后加B 表示二进制数
带D或不带字母符号 表示十进制数
带H 表示十六进制数
Ps:
目前在计算机中,数几乎全部用二进制表示
为书写方便,微机中的二进制数用十六进制数缩写
人们最熟悉、最常用的是十进制数
·数制间转换
1. 二←→十六
*二→十六:从右(最低位)向左将二进制数4位1组划分,最后一组若不足4位则在其左边补0,每组用1位十六进制数表示
例:1111111000111B→ 1 1111 1100 0111B
→0001 1111 1100 0111B = 1FC7H
*十六→二:用4位二进制数代替1位十六进制数
2.十六←→十
*十六→十:将十六进制数按权展开相加
例:1F3DH=163×1+162×15+161×3+160×13
=4096×1+256×15+16×3+1×13
=4096+3840+48+13=7997
*十进制整数→十六:除16取余法
例:38947=9823H余数倒序排列
16 38947 3
16 2434 2
16 152 8
16 9 9
0
3.二←→十
同理
·符号数的表示方法
符号数的表示:用数的符号和数值部分一起编码的方法
符号位:8位(字节)、16位(字)或32位(双字)机器数的最高位
·区分机器数、真值、无符号数
(1)原码:数值用其绝对值
例:X1= 105=+1101001B [X1]原=01101001B
X2=-105=-1101001B [X2]原=11101001B
原码中第7位为符号位,其余7位为数值位(为真值的绝对值)
8位原码数的数值范围为FFH~7FH(-127~127);
16位原码数的数值范围为FFFFH~7FFFH(-32767~32767)
(2)反码
正数的反码与原码一样,符号位为0,其余位为其数值;
负数的反码为它的绝对值连同符号位按位取反
一个负数的反码的数值部分并不是其真值的绝对值,要按位取反才能求得真值的绝对值
(3)补码
正数的补码与原码一样,符号位为0,其余位为其数值;
负数的补码为其绝对值的补数
补数有两种求法:
1.按位取反后再加1
从最低位向最高位扫描,保留直至第一个“1”的所有“0”位,第一个“1”左边各位按位取反
如:X1= 105=+1101001B [X1]补=01101001B
X2=-105=-1101001B [X2]补=10010111B
2.对补码表示的负数求补可以得到其绝对值
如:[-105]补=10010111B=97H
求补,得:01101001=69H=105,即补码表示的机器数97H的真值是-69H(=-105)
一个补码数,若最高位为0,则该数即为此数的绝对值;
若最高位为1,则其补数为该数的绝对值
8位补码数的范围:80H~7FH(-128~127).
16位补码数的范围:8000H~7FFFH(-32768~32767)
补码数80H和8000H的最高位既代表了符号为负又代表了数值为1
1个二进制补码数的符号位向左扩展若干位后,所得到的补码数的真值不变
如:[68]补=44H→字节, [68]补=0044H→字
[-68]补= BCH →字节, [-68]补= FFBCH→字
微机中,符号数用补码表示!
·二进制数的加减运算
把机器数均当作无符号数进行运算,即符号位也参与运算
(1)无符号数的运算
两个无符号数相加----和为正数.当和超过其位数所允许的范围时,向更高位进位,用CF表示,无进位,CF=0 有进位,CF=1
两个无符号数相减----被减数大于或等于减数,无借位,结果为正;被减数小于减数,有借位,结果为负。对无符号数进行减法运算,其结果的符号用进位来判别:CF=0(无借位)结果为正;CF=1(有借位)结果为负
(2)符号数的运算
两数进行运算,结果超出表示范围会产生溢出;用OF表示
数的低位部分均为无符号数,只有高位部分才为符号数
溢出不同于补码运算中的进位或借位丢失
判断补码运算有无溢出的方法:
设符号位向进位位的进位为CY,数值部分向符号位的进位为CS,则溢出判别式为:
OF=CY ⊕ CS
当OF=1时,有溢出;当OF=0时,无溢出
1 ⊕0=1, 1 ⊕1=0
·二进制数的逻辑运算与逻辑电路
(1)逻辑非→按位求反
(2)逻辑乘∧(逻辑与)→按位求“与”
规则:0∧0=0,0∧1=0,1∧0=0,1∧1=1
(3)逻辑加∨(逻辑或)→按位求“或”
规则:0∨0=0,0∨1=1,1∨0=1,1∨1=1
(4)逻辑异或⊕(按位加)→按位求模2和
规则:0+0=0,0+1=1,1+0=1,1+1=0
(5)正逻辑与负逻辑
正逻辑——高电平表示逻辑1,低电平表示逻辑0
负逻辑——高电平表示逻辑 0,低电平表示逻辑1
·二进制编码
(1)二进制编码的十进制数
即用二进制表示的十进制数,简称BCD数 ,常用的是8421 BCD码
压缩BCD数→用8位二进制数表示2个十进制数位
非压缩BCD数→用8位二进制数表示1个十进制数位
如:
19 →压缩BCD →0001 1001 = 19H
19 →非压缩BCD →00000001 00001001 = 0109H
(2)ASCII码----字符在机内的表示
*十进制数的ASCII码转换成BCD数→ 减30H
BCD数转换成十进制数的ASCII码→ 加30H
*将十六进制数的ASCII码转换为十六进制或将十六进制转换为十六进制数的ASCII码,要先判别ASCII码是在哪个区段内,然后再加或减30H或37H。
*十进制数的ASCII码转换为二进制数:
将ASCII码转换为ASCII BCD数→写出ASCII BCD数的十进制数→将十进制数转换为二进制数
*二进制数转换为十进制数的ASCII码→过程与(3)相反
·BCD数的加减运算
BCD数低位与高位之间逢“10”进1,4位二进制数之间逢“16”进1。故BCD数进行运算后须进行调整
(1)BCD数加法
调整规则:和在0~9之间,保持不变;和大于9,加6调整
如:48+59=107
0100 1000+ 0101 1001=1010 0001
1010 0001+0110 0110=10000 0111←BCD数
(2)BCD数减法
调整规则:差在0~9之间,不变;差大于9,减6调整
如:28-19=9
0010 1000- 0001 1001=0000 1111
0000 1111- 0000 0110=0000 1001←BCD数