请输入您要查询的百科知识:

 

词条 机器数
释义

一、机器数的定义

通常,机器数是把符号"数字化"的数,是数字在计算机中的二进制表示形式。

二、机器数的特点

机器数有两个基本特点:

一:

数的符号数值化。实用的数据有正数和负数,由于计算机内部的硬件只能表示两种物理状态(用0和1表示),因此实用数据的正号“+”或负号“-”,在机器里就用一位二进制的0或1来区别。通常这个符号放在二进制数的最高位,称符号位,以0代表符号“+”,以1代表符号“-”。因为有符号占据一位,数的形式值就不等于真正的数值,带符号位的机器数对应的数值称为机器数的真值。 例如二进制真值数-011011,它的机器数为 1011011。

二:

二进制的位数受机器设备的限制。机器内部设备一次能表示的二进制位数叫机器的字长,一台机器的字长是固定的。字长8位叫一个字节(Byte),现在机器字长一般都是字节的整数倍,如字长8位、16位、32位、64位。

三、机器数的分类

根据小数点位置固定与否,机器数又可以分为定点数和浮点数。 通常,使用定点数表示整数,而用浮点数表示实数。整理如下:

(1)

整数。认为整数没有小数部分,小数点固定在数的最右边。整数可以分为无符号整数和有符号整数两类。无符号整数的所有二进制位全部用来表示数值的大小;有符号整数用最高位表示数的正负号,而其他位表示数值的大小。例如十进制整数-65的计算机内表示可以是11000001。

(2)

实数。实数的浮点数表示方法是:把一个实数的范围和精度分别用阶码和尾数来表示。在计算机中,为了提高数据表示精度,必须唯一地表示小数点的位置,因此规定浮点数必须写成规范化的形式,即当尾数不为0时,其绝对值大于或者等于0.5且小于1(注:因为是二进制数,要求尾数的第1位必须是1).例如设机器字长为16位,尾数为8位,阶码为6位,则二进制实数-1101.010的机内表示为0000100111010100。

3 机器数与真值 不带符号的数是数的绝对值,在绝对值前加上表示正负的符号就成了符号数。直接用正号“+”和负号“-”来表示其正负的二进制数叫做符号数的真值。在计算机中不仅用0,1编码的形式表示一个数的数值部分,正、负号亦同样用0,1编码表示。把符号数值化以后,就能将它用于机器中。我们把一个数在机器内的表示形式称为机器数。而这个数本身就是该机器数的真值。“01101”和“11101”是两个机器数,而它们的真值分别为+1101和-1101。

四、机器数的原码、反码和补码三种形式

4.1 原码

将数的真值形式中“+”号用“0”表示,“-”号用“1”表示时,叫做数的原码形式,简称原码。若字长为n位,原码一般可表示为:

(1)当X为正数时[X]原和X一样,即[X]原 = X。当X为负数时 。由于X本身为负数,所以,实际上是将∣X∣数值部分绝对值前面的符号位上写成“1”即可。

原码表示法比较直观,它的数值部分就是该数的绝对值,而且与真值、十进制数的转换十分方便。但是它的加减法运算较复杂。当两数相加时,机器要首先判断两数的符号是否相同,如果相同则两数相加,若符号不同,则两数相减。在做减法前,还要判断两数绝对值的大小,然后用大数减去小数,最后再确定差的符号,换言之,用这样一种直接的形式进行加运算时,负数的符号位不能与其数值部分一道参加运算,而必须利用单独的线路确定和的符号位。要实现这些操作,电路就很复杂,这显然是不经济实用的。为了减少设备,解决机器内负数的符号位参加运算的问题,总是将减法运算变成加法运算,也就引进了反码和补码这两种机器数。

4.2 反码

如前所述,为了克服原码运算的缺点,采用机器数的反码和补码表示法。若字长为n位,反码可表示为:

(2)即对正数来说,其反码和原码的形式相同;对负数来说,反码为其原码的数值部分各位变反。

4.3 补码

补码是根据同余的概念引入的,我们来看一个减法通过加法来实现的例子。假定现在是北京时间6点整,有一只手表却是8点整,比北京时间快了2小时,校准的方法有两种,一种是倒拨2小时,一种是正拨10小时。若规定倒拨是做减法,正拨是做加法,那么对手表来讲减2与加10是等价的,也就是说减2可以用加10来实现。这是因为8加10等于18,然而手表最大只能指示12,当大于12时12自然丢失,18减去12就只剩6了。这说明减法在一定条件下,是可以用加法来代替的。这里“12”称为“模”,10称为“-2”对模12的补数。推广到一般则有:

A – B = A + ( – B + M ) = A + ( – B )补

(3)可见,在模为M的条件下,A减去B,可以用A加上-B的补数来实现。这里模(module)可视为计数器的容量,对上述手表的例子,模为12。在计算机中其部件都有固定的位数,若位数为n,则计数值为 ,亦即计数器容量为 ,因此计算机中的补码是以“ ”为模,其定义如下:

(4)简言之,对正数来说,其补码和原码的形式相同;而从(3)式和(4)式可以看出,对于负数,补码为其反码的末位加1。

总之,正数的原码、反码和补码是完全相同的;负数的原码、反码和补码其形式各不相同。另外,特别要注意的是,对于负数的反码和补码(即符号位为1的数),其符号位后边的几位数表示的并不是此数的数值。如果要想知道此数的大小,一定要求其反码或补码才行。

五、 机器数反码、补码的算术运算

5.1 反码的算术运算

反码运算要注意的问题:

1.反码运算时,其符号位与数值一起参加运算。

2.反码的符号位相加后,如果有进位出现,则要把它送回到最低位去相加(循环进位)。

3.用反码运算,其运算结果亦为反码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求反才是其真值。

[例1] 已知X = + 1101 , Y = + 0110 , 用反码计算Z = X-Y。

解: [X]反 = 01101,[-Y]反 = 11001,则[Z]反 =[X]反+[-Y]反 = 01101+11001+1(循环进位)= 00111 , 其真值为Z = +0111。

[例2] 已知X = + 0110 , Y = + 1101 , 用反码计算Z = X-Y。

解: [X]反 = 00110,[-Y]反 = 10010,则[Z]反 =[X]反+[-Y]反 = 00110 + 10010

= 11000 , 其真值为Z = - 0111。

采用反码运算较好的解决了原码运算所遇到的困难或问题,但由于循环进位需要二次算术相加,延长了计算时间,这同样给电路带来麻烦。而采用下述的补码运算则可避免循环进位的两次计算,同时,采用补码运算对溢出的判断也较采用反码简单的多,所以现在机器中的算术运算普遍采用补码运算。

5.2 .1补码的算术运算

补码运算要注意的问题:

1.补码运算时,其符号位与数值部分一起参加运算。

2.补码的符号位相加后,如果有进位出现,要把这个进位舍去(自然丢失)。

3.用补码运算,其运算结果亦为补码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求补才是其真值。

[例3] 已知X = + 1101 , Y = + 0110 , 用补码计算Z = X-Y。

解: [X]补 = 01101,[-Y]补 = 11010,则[Z]补 =[X]补+[-Y]补 = 01101+11010

= 100111 , 其真值为Z = + 0111。

[例4] 已知X = + 0110 , Y = + 1101 , 用补码计算Z = X-Y。

解: [X]补 = 00110,[-Y]补 = 10011,则[Z]补 =[X]补+[-Y]补 = 00110 + 10011

= 11001 , 其真值为Z = - 0111。

5.2.2 溢出及补码溢出的判断

无论采用何种机器数,只要运算的结果大于数值设备所能表示数的范围,就会产生溢出。 溢出现象应当作一种故障来处理,因为它使结果数发生错误。异号两数相加时,实际是两数的绝对值相减,不可能产生溢出,但有可能出现正常进位;同号两数相加时,实际上是两数的绝对值相加,既可能产生溢出,也可能出现正常进位。

由于补码运算存在符号位进位自然丢失而运算结果正确的问题,因此,应区分补码的溢出与正常进位。

[例5] 某数字设备用五位二进制表示数,计算

(1)9+3 (2)-9-3 (3)9+12 (4)-9-12

解:(1)[+9]补+[+3]补= 01001+ 00011 = 01100 = +12 正确;

(2)[-9]补+[-3]补= 10111+ 11101 = 110100 = 10100(符号位进位自然丢失),其真值为-1100 = -12正确;

(3)[+9]补+[12]补= 01001 + 01100 = 10101 其真值为-1011 =-11错误,产生了溢出;

(4)[-9]补+[-12]补 = 10111+10100 = 101011 其真值为01011= +11 错误,产生了溢出。

(1)、(2)两题结果均正确,查其最高位和次高位的进位位,不是均无进位产生,就是均产生进位;(3)、(4)两题结果均错误,查其最高位和次高位的进位位,只有一位产生了进位。此即为判断机器是正常进位还是溢出的基本依据,在微型机中可用异或电路来实现上述的判断。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/27 3:20:43