发布网友 发布时间:2022-04-24 15:20
共1个回答
热心网友 时间:2023-01-21 00:09
在计算机中,无论数值还是数的符号,都只能用0、1来表示。通常专门用一个数的最高位作为符号位: 0表示正数,1表示负数。例如: +18=00010010-18=10010010这种在计算机中使用的、连同符号位一起数字化了的数,称为机器数。机器数所表示的真实值则叫真值。例如机器数10110101所表示的真值为-53(十进制)或-0110101(二进制);机器数00101010的真值为+42(十进制)或+0101010(二进制)。可见,在机器数中,用0、1取代了真值的正、负号。2. 有符号数的机器数表示方法实际上,机器数可以有不同的表示方法。对有符号数,机器数常用的表示方法有原码、反码、补码三种。1) 原码上述机器数表示方法,即最高位表示符号、数值位用二进制绝对值表示的方法,便为原码表示方法。换言之,设机器数位长为n,则数X的原码可定义为: n位原码表示数值的范围是: -(2n-1-1)~+(2n-1-1)它对应于原码的111…1~011…1。数0的原码有两种不同形式: [+0]原=000…0[-0]原=100…0原码表示简单、直观,与真值间转换方便。但用它作加减法运算不方便,而且0有+0和-0两种表示方法。2) 反码正数的反码表示与原码相同;负数的反码是将其对应的正数各位(连同符号位)取反得到,或将其原码除符号位外各位取反得到。可见,反码的定义可表示为: 或者: 例如: [+3]反=00000011(设为8位)[-3]反=11111100(设为8位)n位反码表示数值的范围是: -(2n-1-1)~+(2n-1-1)它对应于反码的100…0~011…1。数0的反码也有两种形式: [+0]反=000…0(全0)[-0]反=111…1(全1)将反码还原为真值的方法是: 反码→原码→真值,而[X]原=[[X]反]反。或者说,当反码的最高位为0时,后面的二进制序列值即为真值,且为正数;最高位为1时,则为负数,后面的数值位要按位求反才为真值。3) 补码正数的补码表示与原码相同;负数的补码是将其对应的正数各位(连同符号位)取反加1(最低位加1)而得到,或将其原码除符号位外各位取反加1而得到。可见,补码的定义可用表达式表示为: 或者: 例如: [+3]补=00000011(设为8位)[-3]补=11111101(设为8位)n位补码表示数值的范围是: -2n-1~+(2n-1-1)它对应于补码的100…0~011…1。数0的补码只有一个: [+0]补=[-0]补=000…0 (全0)将补码还原为真值的方法是: 补码→原码→真值,而[X]原=[[X]补]补。或者说,若补码的符号位为0,则其后的数值位值即为真值,且为正数;若符号位为1,则应将其后的数值位按位取反加1,所得结果才是真值,且为负数。综上所述,可以得出以下几点结论。(1) 原码、反码、补码的最高位都是表示符号位。符号位为0时,表示真值为正数,其余位为真值。符号位为1时,表示真值为负数,其余位除原码外不再是真值: 对于反码,需按位取反才是真值;对于补码,则需按位取反加1才是真值。(2) 对于正数,三种编码都是一样的,即[X]原=[X]反=[X]补;对于负数,三种编码互不相同。所以,原码、反码、补码本质上是用来解决负数在机器中表示的三种不同的编码方法。(3) 二进制位数相同的原码、反码、补码所能表示的数值范围不完全相同。以8位为例,它们表示的真值范围分别为: 原码: -127~+127反码: -127~+127补码: -128~+127(4) 上面讨论的原码、反码、补码都是针对真值X为整数而言的。若真值X为小数(纯小数),则其n位原码、反码、补码的定义应为: 最后要说明的是,当计算机采用不同的码制时,运算器和控制器的结构将不同。采用原码形式的计算机称为原码机,类似的有反码机和补码机。目前以补码机居多,各种微机基本上都是以补码作为机器码,原因是补码的加减法运算简单,减法运算可变为加法运算,可省掉减法器电路;而且它是符号位与数值位一起参加运算,运算后能自动获得正确结果。3. 数的定点和浮点表示当所要处理的数含有小数部分时,就有一个如何表示小数点的问题。在计算机中并不用某个二进制位来表示小数点,而是隐含规定小数点的位置。根据小数点的位置是否固定,数的表示方法可分为定点表示和浮点表示,相应的机器数就称为定点数和浮点数。通常,对于任意一个二进制数X,都可表示成: X=2J·S其中,S为数X的尾数,J为数X的阶码,2为阶码的底。尾数S表示数X的全部有效数字,阶码J则指出了小数点的位置。S值和J值都可正可负。当J值固定时,表示是定点数;当J值可变时,表示是浮点数。1) 定点数在计算机中,根据小数点固定的位置不同,定点数有定点(纯)整数和定点(纯)小数两种。当阶码J=0,尾数S为纯整数时,说明小数点固定在数的最低位之后,即称为定点整数。当阶码J=0,尾数S为纯小数时,说明小数点固定在数的最高位之前,即称为定点小数。定点整数和定点小数在计算机中的表示形式没什么区别,其小数点完全靠事先约定而隐含在不同位置,如图1.5所示。图1.5定点整数和定点小数格式2) 浮点数当要处理的数是既有整数又有小数的混合小数时,采用定点数格式很不方便。为此,人们一般都采用浮点数进行运算。浮点数一般由4个字段组成,其一般格式如下: 阶符Jf阶码J数符Sf尾数(也叫有效数)S←———阶码部分———→←————尾数部分————→ 其中阶码一般用补码定点整数表示,尾数一般用补码或原码定点小数表示。浮点数的实际格式多种多样。如80486的浮点数格式就不是按上述顺序存放4个字段的,而是将数符位Sf置于整个浮点数的最高位(阶码部分的前面),且尾数和阶码部分有其与众不同的约定,详见2.3.1小节。为保证不损失有效数字,一般还对尾数进行规格化处理,即保证尾数的最高位是1,实际大小通过阶码进行调整。例如,某计算机用32位表示一个浮点数,格式如下: 31 30 24 23 22 0阶符阶码数符尾 数 其中阶码部分为8位补码定点整数,尾数部分为24位补码定点小数(规格化)。用它来表示一个数-258.75,则可按该格式变换如下: (-258.75)10= (-100000010.11)2= (-0.10000001011)×29= (1.10000001011000000000000)原×2(00001001)原= (1.01111110101000000000000)补×2(00001001)补所以,-258.75在该计算机中的浮点表示为: 00001001101111110101000000000000按照这一浮点数格式,可计算出它所能表示的数值范围为: -1×227-1~+(1-2-23)×227-1显然,它比32位定点数表示的数值范围(最大为-231~+(231-1))要大得多。这也正是浮点数表示优于定点数表示的突出点之一。4. 无符号数的机器数表示方法无符号数在计算机中通常有三种表示方法: (1) 位数不等的二进制码。(2) BCD码。(3) ASCII码。其中BCD码的表示形式一般又有两种: 压缩BCD码(或叫组合BCD码,紧凑BCD码)和非压缩BCD码(或叫非组合BCD码,非紧凑BCD码)。前者每位BCD码用4位二进制表示,一个字节(8位二进制)表示2位BCD码,如10010011B表示十进制数93;后者每位BCD码用一个字节表示,高4位总是0000,低4位的0000~1001表示0~9,例如93如用非压缩BCD码表示,则需用2个字节(16位二进制): 00001001┊00000011ASCII码表示与非压缩BCD码表示很相似,低4位完全相同,都是用0000~1001表示0~9;差别仅在高4位,ASCII码不是0000,而是0011。ASCII码一般在计算机的输入、输出设备中使用,而二进制码和BCD码则在运算、处理过程中使用。因此,在应用计算机解决实际问题时,常常需要在这几种机器码之间进行转换。数字1 计算机中表示为00000001 数字2 00000010 数字3 00000011 数字4 00000100 数字5 00000101数字6 00000110 数字7 00000111 数字8 00001000 数字9 00001001 数字10 00001010