1、1 1 4计算机中带符号数的表示方法 整数可以是正的或负的 正整数是从0到正无穷 负整数是从负无穷到0 为了高效地利用计算机的存储空间 人们设计开发了两种使用广泛的整数表示法 无符号整数和有符号整数 2 3 1 4 1无符号整数的格式 无符号整数就是没有符号的整数 0 正无穷大 由于计算机不可能表示范围内的所有整数 通常 计算机都定义了一个最大无符号整数的常量 这样 无符号整数的范围就介于0到该常量之间 最大无符号整数取决于计算机中分配用于保存无符号整数的二进制位数 设N是计算机中分配用于表示一个无符号整数的二进制位数 则无符号整数的范围为 0 2N 1 4 表示法 首先将整数变成二进制数 如
2、果二进制位数不足N位 则在二进制数的左边补0 使它的总位数为N位 举例 将9存储在8位存储单元中 00001001将258存储在16位存储单元中 0000000100000010 5 两类不同的计算机中无符号整数的存储 6 溢出 如果试图存储一个超出所定义范围内的数时而发生的错误 例如 8位存储单元所能存放的无符号数的范围是 0 28 1 即0 255如果将258存放在8位存储单元中 就会产生溢出 7 将无符号二进制数转换成十进制数 同二进制到十进制的转换 例 将00101011转换成十进制数 32 8 2 1 43 8 应用 无符号整数表示法可以提高存储的效率 因为不必存储整数的符号 即所有
3、的存储单元都可以用来存储数 只要无需用到负数 都可以用无符号整数表示法 计数 当计数时 不需要负数 可以从1 有时0 开始增长 寻址 有些计算机语言 在一个存储单元中存储了另一个存储单元的地址 地址是从0 存储器的第一个字节 开始到整个存储器的总字节数的正数 9 1 4 2有符号数1原码表示法 也叫符号加绝对值表示法 用1个二进制位表示符号 0表示正 1表示负 则在8位存储单元中 仅仅用7位表示数的绝对值 不带符号 最大的正数值仅是无符号整数最大数的一半 注意 在原码表示法中0有两种表示法 正数0和负数0 在8位存储单元中 000000000 010000000 若整数的原码形式为 0 1 2
4、 n 则原码表示的定义是 10 表示的范围 11 表示法 将数转换成二进制 其中符号被忽略 如果二进制位数不足N 1 左边补0 使总的位数为N 1位 如果是正数 则在左边加0 使它变为N位 如果是负数 则在左边加1 使它变为N位 注意 在原码表示中 最左边的位用于定义数的符号 如果是0 则表示该数为正数 如果是1 则表示该数是负数 12 例1 用原码表示法将 7存储在8位存储单元中 00000111 原例2 用原码表示法将 7存储在8位存储单元中 10000111 原例3 用原码表示法将 258存储在16位存储单元中 100000010000000100000010 1000000100000
5、010 原 13 两类不同的计算机中有符号整数的存储 14 将用原码表示的二进制数转换成十进制数 忽略第一位 最左边位 把剩下的N 1位二进制数转换成十进制数 再在数的最左边加上 号或 号 例2 把 10111011 原转换成十进制数 59 15 采用原码表示法的优点 简单易懂 缺点 1 加法运算复杂 这是因为 当两数相加时 如果是同号则数值相加 如果是异号 则要进行减法 而在进行减法时还要比较绝对值的大小 然后用绝对值大的数减去绝对值小的数 最后还要给结果选择符号 2 零的原码不惟一 为了解决这些矛盾 人们找到了补码表示法 16 2反码表示法 取反 将所有的0改为1 将所有的1改为0 规定
6、正数 使用原码表示法 负数 将正数取反表示 若整数的原码形式为 0 1 2 n 则反码表示的定义是 17 注意 在反码表示法中0有两种表示法 正数0和负数0 在8位存储单元中 000000000 011111111 18 表示法 将数转换成二进制 其中符号被忽略 在数的左边补0 使总的位数为N位 如果是正数 则不需变动 如果是负数 则将每一位取反 将0改为1 将1改为0 19 例1 用反码表示法将 7存储在8位存储单元中 00000111 反例2 用反码表示法将 7存储在8位存储单元中 11111000 反例3 用反码表示法将 258存储在16位存储单元中 100000010000000010
7、0000010 1111111011111101 反 20 将用反码表示的二进制数转换成十进制数 如果最左边的位为0 正数 把整个二进制数转换成十进制数 在数的最左边加上 号 如果最左边的位为1 负数 把整个二进制数取反 把转换过的二进制数转换成十进制数 在数的最左边加上 号 例1 把 11110110 反转换成十进制数 9 21 注意 二进制反码表示法需要转换所有的位 如果把正数取反 就得到相应的负数 如果把负数取反 就得到相应的正数 如果对一个数取两次反 就得到原来的值 应用 它是二进制补码的基础 3补码表示法 我们先以钟表对时为例说明补码的概念 假设现在的标准时间为3点正 而有一只表已经
8、6点了 为了校准时间 可以采用两种方法 一是将时针退6 3 3格 一是将时针向前拨12 3 9格 这两种方法都能对准到3点 由此可以看出 减3和加9是等价的 就是说9是 3 对12的补码 可以用数学公式表示 3 9 mod12 mod12的意思就是12模数 这个 模 表示被丢掉的数值 上式在数学上称为同余式 上例中其所以6 3和6 9 mod12 等价 原因就是表指针超过12时 将12自动丢掉 最后得到15 12 3 从这里可以得到一个启示 就是负数用补码表示时 可以把减法转化为加法 这样 在计算机中实现起来就比较方便 23 3补码表示法 若整数的原码形式为 0 1 2 n 则补码表示的定义是
9、 24 表示法 将数转换成二进制 其中符号被忽略 在数的左边补0 使总的位数为N位 如果是正数 则不需变动 如果是负数 则将各位取反 末位加1 或将最右边的所有0和首次出现的1保持不变 其余各位取反 25 例1 用补码表示法将 7存储在8位存储单元中 00000111 补例2 用补码表示法将 7存储在8位存储单元中 11111001 补例3 用补码表示法将 40存储在16位存储单元中 101000 0000000000101000 1111111111011000 补 26 将用补码表示的二进制数转换成十进制数 如果最左边的位为0 正数 把整个二进制数转换成十进制数 在数的最左边加上 号 如果
10、最左边的位为1 负数 从最右边开始到第一个1出现 这部分保持不变 其余的求反 把转换过的二进制数转换成十进制数 在数的最左边加上 号 27 例1 把 11110110 补转换成十进制数 负数00001010 10 28 注意 二进制求补可以通过对除了从最右边的0到第一个1 包括1 外所有的位取反来实现 如果把正数求补 就得到相应的负数 如果把负数求补 就得到相应的正数 如果对一个数取两次补 就得到原来的值 应用 它是计算机中用于存储整数的标准表示法 用于整数和浮点数的算术运算 用于逻辑运算 例 将十进制真值 127 1 0 1 127 列表表示成二进制数及原码 反码 补码 解 二进制真值 及其
11、诸码值列于下表 其中0在 原 反中有两种表示 数据表示格式有两种 定点格式浮点格式 定点格式容许的数值范围有限 但要求的处理硬件比较简单 浮点格式容许的数值范围很大 但要求的处理硬件比较复杂 1 定点数的表示方法 定点 小数点位置约定在固定的位置 不显式表示 格式 0 1 2 n其中 0为符号位定点小数 小数点位于 0和 1之间 表数范围 0 1 2 n定点整数 小数点位于 n右边 表数范围 0 2n 1目前计算机中多采用定点纯整数表示 因此将定点数表示的运算简称为整数运算 1 4 3定点数与浮点数 浮点 小数点位置可在一定范围内移动 目的 扩大表数范围 例如电子的质量 9 10 28克 和太
12、阳的质量 2 1033克 相差甚远 在定点计算机中无法直接来表示这个数值范围 故用浮点数表示 浮点表示法 把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示 这种把数的范围和精度分别表示的方法 数的小数点位置随比例因子的不同而在一定范围内自由浮动 任意一个十进制数 可以写成 10E 其中 M 尾数 是一个纯小数 E 比例因子的指数 称为浮点的指数 是一个整数 同样 在计算机中一个任意进制数 可以写成 e m其中 R 比例因子的基数 由于计算机采用的是二进计数值 所以 一般规定 为2 或2的整数幂 如8或16 2 浮点数的表示方法 一个机器浮点数由阶码和尾数及其符号位组成 尾数 用
13、定点小数表示 给出有效数字的位数决定了浮点数的表示精度 阶码 用整数形式表示 指明小数点在数据中的位置 决定了浮点数的表示范围 浮点数的表示格式 格式1 阶符阶码尾符尾数 浮点数所表示的范围远比定点数大 假设机器中的数由8位二进制数表示 包括符号位 浮点表示时 用3位表示阶码 其中含一位符号位 5位表示尾数 其中含一位符号位 两者表示范围的比较如下表所示 从上表看出 表示数的位数相同时 浮点表示的范围比定点表示的范围大得多 当机器字长一定时 分给阶码的位数越多 尾数占用的位数就越少 则数的表示范围越大 而尾数占用的位数减少 必然会减少数的有效数位 即影响数的精度 若阶码和尾数各占4位 只考虑绝
14、对值 则数的表示范围是2 111 0 001 2111 0 111 即为十进制数1 1024到112 这比阶码为3位时数的表示范围大得多 但尾数减少了一位 这就使尾数的精度受到了影响 64位浮点数 636252510 格式2 IEEE754标准 32位浮点数 313023220 其中 S 符号位 0表示正 1表示负 E 表示阶码M 表示尾数 R 默认为2 正上溢出 负上溢出 下溢出机器零 可表示的正数区 可表示的负数区 虽然浮点表示能扩大数据的表示范围 但因为机器字长是有限 所以它的表数范围仍然是有限的 如果在运算过程中 出现超出机器所能表示范围的数据 绝对值太大超过表数范围称为溢出 绝对值大小超过表数范围通常当成机器零 36 作业 二进制数11101 10101对应的十六进制数为 它所对应的十进制数为 十进制数85 875对应的二进制数为 它所对应的十六进制数为 有符号的十进制数 45用8位二进制数表示为 它所对应的十六进制表示为 有符号的十进制数 45用8位二进制数表示为 它所对应的十六进制表示为 写出 45和 45的原码 反码和补码表示