机器数及其编码
1、 机器数与真值
机器只认识二进制数:0、1。
这是因为,电路状态常有两个,如通、断;高电平、低电平;…可用0、1表示。
这种0、1、0、1…1在机器中的表现形式——机器数。一般为8位。
2、 机器数的编码及运算
对带符号数而言,有原码、反码、补码之分,计算机内一般使用补码。
1) 原码
将数“数码化”,原数前“+”用0表示,原数前“-”用1表示,数值部分为该数本身,这样的机器数叫原码。
设X——原数;则[X]原 = X(X 0)
[X]原 = 2n-1 – X (X 0),n为字长的位数。
如,[+3]原 = 00000011B
[-3]原 = 27 - (-3) = 10000011B
0有两种表示方法:00000000 +0
10000000 -0
原码最大、最小的表示:+127、-128
2) 反码
规定正数的反码等于原码;负数的反码是将原码的数值位各位取反。
[X]反 = X (X 0)
[X]反 =(2n –1)+ X (X 0)
如,[+4]反 = [+4]原 = 00000100 B
[-4]反 = (28 –1)+(-5) = 11111111- 00000101 = 11111010 B
反码范围:-128 ~ +127
两个0; +0 —— 00000000 B
-0 —— 11111111 B
3) 补码
补码的概念:现在是下午3点,手表停在12点,可正拨3点,也可倒拨9点。即是说-9的操作可用+3来实现,在12点里:3、-9互为补码。
运用补码可使减法 变成加法。
规定:正数的补码等于原码。
负数的补码求法:1)反码 + 1
公 式:[X]补 = 2n + X (X<0)
如,设X = - 0101110 B , 则[X]原 = 10101110 B
则[X]补 = [X]反 + 1 = 11010001 + 00000001 = 11010010 B
如,[+6]补 = [+6]原 = 00000110 B
[-6]补 = 28 + (-6) = 10000000 – 00000110 = 11111010 B
8位补码的范围 –128 ~ +127。
0 的个数:只一个,即00000000
而10000000 B是-128的补码。
原码、反码、补码对照表:表1-2 P10
4)补码的运算
当X≥0时,[X]补= [X]反=[X]原
[ [X]补]补 = [X]原
[X]补+ [Y]补 = [ X+Y ]补
[ X-Y ]补= [ X+(-Y)]补
例:已知 X=52 Y=38 求X-Y
计算机在做算术运算时,必需检查溢出,以防止发生错误
5)运算的溢出问题
资 料字长(位数)有一定限制,所以资料的表示应有一个范围。
如字长8位时; 补码范围-128~+127
若运算结果超出这个范围,便溢出。
例:
错:两个负数相加和为正数。
可见:结果正确 (无溢出)时,Cs+1 = Cs
结果错误(溢出)时,Cs+1 ≠ Cs
溢出判断:溢出 = Cs+1 Cs(即结果是0为无溢出;1为有溢出)
十进制数的编码
对机器:二进制数方便,
对人 :二进制数不直观,习惯于十进制数。
在编程过程中,有 时需要采用十进制运算,但机器不认识十进制数。
怎么办?
可以将十进制的字符用二进制数进行编码:
这叫做二进制数对十进制编码——BCD码。
上述每4位二进制数表示一个十进制字符,这4位中各位的权依次是:
8、4、2、1——8421 BCD码。
BCD码的运算:
(1)BCD码加法规则
两个BCD数相加时,“某位”的和小于10则保持不变;
两个BCD数相加时,“某位”的和大于9,则和数应加6修正。
(2)BCD码减法规则
两个BCD数相减时,“某位”的差未发生借位,则差数保持不变;
两个BCD数相减时,“某位”发生了借位,其差应减6修正。
这里“某位”指BCD数中的“个位”、“十位”、“百位”、……