计算机中有符号的机器数,机器数
机器数是将符号"数字化"的数,是数字在计算机中的⼆进制表⽰形式。机器数有2个特点:⼀是符号数字化,⼆是其数的⼤⼩受机器字长的限制。
中⽂名
机器数
外⽂名
computer number形 式
原码、反码、补码
小数的原码领 域
信息科学
机器数特点
编辑
语⾳
机器数有两个基本特点:
1、数的符号数值化。实⽤的数据有正数和负数,由于计算机内部的硬件只能表⽰两种物理状态(⽤0和1表⽰),因此实⽤数据的正
号“+”或负号“-”,在机器⾥就⽤⼀位⼆进制的0或1来区别。通常这个符号放在⼆进制数的最⾼位,称符号位,以0代表符号“+”,以1代表符号“-”。因为有符号占据⼀位,数的形式值就不等于真正的数值,带符号位的机器数对应的数值称为机器数的真值。 例如⼆进制真值数-011011,它的机器数为 1011011。
2、⼆进制的位数受机器设备的限制。机器内部设备⼀次能表⽰的⼆进制位数叫机器的字长,⼀台机器的字长是固定的。字长8位叫⼀个字节(Byte),机器字长⼀般都是字节的整数倍,如字长8位、16位、32位、64位。[1]
机器数分类
编辑
语⾳
根据⼩数点位置固定与否,机器数⼜可以分为定点数和浮点数。 通常,使⽤定点数表⽰整数,⽽⽤浮点数表⽰实数。整理如下:
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。
机器数机器数的形式
编辑
语⾳
1、原码
将数的真值形式中“+”号⽤“0”表⽰,“-”号⽤“1”表⽰时,叫做数的原码形式,简称原码。若字长为n位,原码⼀般可表⽰为:
当X为正数时[X]原和X⼀样,即[X]原 = X。当X为负数时 。由于X本⾝为负数,所以,实际上是将∣X∣数值部分绝对值前⾯的符号位上写成“1”即可。
原码表⽰法⽐较直观,它的数值部分就是该数的绝对值,⽽且与真值、⼗进制数的转换⼗分⽅便。但是它的加减法运算较复杂。当两数相加时,机器要⾸先判断两数的符号是否相同,如果相同则两数相加,若符号不同,则两数相减。在做减法前,还要判断两数绝对值的⼤⼩,然后⽤⼤数减去⼩数,最后再确定差的符号,换⾔之,⽤这样⼀种直接的形式进⾏加运算时,负数的符号位不能与其数值部分⼀道参加运算,⽽必须利⽤单独的线路确定和的符号位。要实现这些操作,电路就很复杂,这显然是不经济实⽤的。为了减少设备,解决机器内负数的符号位参加运算的问题,总是将减法运算变成加法运算,也就引
进了反码和补码这两种机器数。
2、反码
如前所述,为了克服原码运算的缺点,采⽤机器数的反码和补码表⽰法。即对正数来说,其反码和原码的形式相同;对负数来说,反码为其原码的数值部分各位变反。
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 )补
可见,在模为M的条件下,A减去B,可以⽤A加上-B的补数来实现。这⾥模(module)可视为计数器的容量,对上述⼿表的例⼦,模为12。在计算机中其部件都有固定的位数,若位数为n,则计数值为 ,亦即计数器容量为 ,因此计算机中的补码是以“ ”为模,其定义如下:
简⾔之,对正数来说,其补码和原码的形式相同;⽽从(3)式和(4)式可以看出,对于负数,补码为其反码的末位加1。
总之,正数的原码、反码和补码是完全相同的;负数的原码、反码和补码其形式各不相同。另外,特别要注意的是,对于负数的反码和补码(即符号位为1的数),其符号位后边的⼏位数表⽰的并不是此数的数值。如果要想知道此数的⼤⼩,⼀定要求其反码或补码才⾏。[1]
机器数机器数的算术运算
编辑
语⾳
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。
采⽤反码运算较好的解决了原码运算所遇到的困难或问题,但由于循环进位需要⼆次算术相加,延长了计算时间,这同样给电路带来⿇烦。⽽采⽤下述的补码运算则可避免循环进位的两次计算,同时,采⽤补码运算对溢出的判断也较采⽤反码简单的多,所以机器中的算术运算普遍采⽤补码运算。
2、补码的算术运算
补码运算要注意的问题:
(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。
3、溢出及补码溢出的判断
⽆论采⽤何种机器数,只要运算的结果⼤于数值设备所能表⽰数的范围,就会产⽣溢出。 溢出现象应当作⼀种故障来处理,因为它使结果数发⽣错误。异号两数相加时,实际是两数的绝对值相减,不可能产⽣溢出,但有可能出现正常进位;同号两数相加时,实际上是两数的绝对值相加,既可能产⽣溢出,也可能出现正常进位。
由于补码运算存在符号位进位⾃然丢失⽽运算结果正确的问题,因此,应区分补码的溢出与正常进位。
[例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)两题结果均错误,查其最⾼位和次⾼位的进位位,只有⼀位产⽣了进位。此即为判断机器是正常进位还是溢出的基本依据,在微型机中可⽤异或电路来实现上述的判断。
[2]
机器数机器数的表⽰⽅法
编辑
语⾳
1、定点表⽰法
定点,即⼩数点固定,固定在有效数位的最前⾯或最后⾯。因为位置是固定的,所以可以隐藏。
在最前⾯则表⽰纯⼩数,在最后⾯则表⽰纯整数,因此在定点计算机的编程语⾔中,纯⼩数对应⼀种变量类型,纯整数对应⼀种变量类型。
由于只能表⽰纯⼩数或纯整数,在编程时要设置合适的⽐例因⼦。
N = M x rE
r是浮点数阶码的底,⼜叫尾数的基数,通常r=2,但可改变。
r增⼤,可表⽰数的范围增⼤。
r增⼤,可表⽰数的个数增⼤。
r增⼤,可表⽰数的精度下降。
r增⼤,将使运算中移位的次数减少,运算速度提⾼。
E叫做阶码,纯整数,常⽤移码或补码表⽰。
M叫做尾数,纯⼩数,常⽤原码或补码表⽰。
E与M都是带符号的定点数。
阶码存⼊阶码部件,尾数存⼊尾数部件,⼀个浮点数是由两个不同的物理部件处理的,
机器就是这么区分哪部分是阶码,哪部分是尾数的,各部件⼜可进⾏各种操作,如阶码的相加、相减、⽐较操作。浮点数的表⽰范围主要由阶码的位数决定,有效数字精度主要由尾数的位数决定。
浮点数的阶码常采⽤移码表⽰,最主要的原因为:
(1)便于⽐较浮点数的⼤⼩。阶码⼤的,真值就⼤;阶码⼩的,真值就⼩。
(2)简化机器中的判0电路。当阶码全为0,尾数也全为0时,表⽰0。
同⼀数值的移码和补码除最⾼位相反外,其它各位相同。
移码通常取2n-1或2n为偏置值。[3]
参考资料
1.
段新⽂. 关于机器数的⼏点注记[J]. 青海师范⼤学学报(⾃科版), 2003(3):22-24.
2.
郭⽟滨. 利⽤公式求机器数[J]. 菏泽学院学报, 1999(2):88-90.
3.
王国伟. 机器数的⼏何表⽰[J]. ⽢肃科学学报, 2002(s1):27-29.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论