购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 整数的表示方法

在二进制系统中,整数可以分为两种类型,即无符号整数和有符号整数。无符号整数只包含正整数和零,有符号整数还包含负整数。无符号整数和二进制数之间存在直接的一一对应关系。但是,对于有符号整数而言,需要将负数转换为二进制补码形式。

在数学中,任意基数的负数都在最前面加上“-”符号来表示。然而,在计算机硬件中,数字都以无符号的二进制形式表示。因此,需要一种编码方式用于表示负号。目前,常用来表示有符号数的三种编码包括原码、反码和补码。

3.1.1 二进制原码格式

为了解决数字符号表示的问题,首要的处理方法是分配一个符号位来表示这个符号。通常,最高有效位用于表示符号。当该位为0时,表示一个正数;而当该位为1时,表示一个负数。其他位用于表示数值大小(也称为绝对值)。因此,一个字节只有7位用于表示数值大小,最高位用于表示符号位,其表示数值的范围为0000000(0 10 )~1111111(127 10 )。

这样,当增加一个符号位(第八位)后,可以表示从(-127) 10 到(+127) 10 的数值。这种表示数值的方法所导致的结果就是有两种方式用于表示数值0,即00000000,表示+0;10000000,表示-0。十进制数(-43) 10 用八位二进制原码可以表示为10101011。有符号数和无符号数的二进制原码表示如表3.1所示。

表3.1 有符号数和无符号数的二进制原码表示

续表

3.1.2 二进制反码格式

可使用二进制反码来描述正数和负数。对于正数而言,与原码形式一样,无须取反。而对于一个负二进制数而言,其反码形式为除符号位以外,对原码的其他位按位取反。同原码表示一样,0的反码表示形式也有两种:00000000(+0)与11111111(-0)。

例如,原码10101011(-43 10 )的反码形式为11010100(-43 10 )。有符号数用反码表示的范围为-(2 N -1 -1)到(2 N -1 -1),以及+0和-0。对于8位二进制数而言,用反码表示时,其表示数的范围为(-127) 10 ~(+127) 10 ,以及00000000(+0)或者11111111(-0),如表3.2所示。

表3.2 无符号数和有符号数的反码表示

3.1.3 二进制补码格式

补码解决了数值0有多种表示的问题,以及循环进位的需要。在补码表示中,负数表示为所对应正数的反码加1。在补码表示中,只有一个0(00000000)。无符号数和有符号数的补码表示如表3.3所示。

表3.3 无符号数和有符号数的补码表示

:用二进制补码可以表示-128,但不能表示+128。在对正值取反时,会发现需要用第9位表示负零。然而,如果简单地忽略这个第9位,那么这个负零与正零的表示将完全相同。

例如,对于(-97) 10 而言,假设字长为8位,其所对应的二进制补码为(10011111) 2 ,如表3.4所示。

表3.4 有符号数的二进制补码表示

对于一个 N 位字长的二进制补码而言,它可以表示数的范围为

-2 N -1 ~2 N -1 -1 EfNOqqKTW+HPbMzmrdCHFnPB4h6MNU/XpMUcwiU09477gV+yA1B6N5zycGSJWUHi

点击中间区域
呼出菜单
上一章
目录
下一章
×