无符号数 ◇没有符号位的数,称为无符号数。 无符号数的最大值比有符号数大一倍。 如字长为8位时,能表示的无符号数的最大值为 11111即255,而8位有符号数的最大值是 011111即+127。 8位二进制无符号数的表示范围为:0~255 16位二进制无符号数的表示范围为:0-65535
2:38:53 无符号数 没有符号位的数,称为无符号数。 无符号数的最大值比有符号数大一倍。 如字长为8位时,能表示的无符号数的最大值为 11111111B,即255,而8位有符号数的最大值是 01111111B,即+127。 18 13:39 8位二进制无符号数的表示范围为:0~255 16位二进制无符号数的表示范围为:0~65535
原码优缺点 ◇原码的优点是直观易懂,机器数和真值间的转换很 容易,用原码实现乘、除运算的规则简单。缺点是 加、减运算规则较复杂。 ◇直接用0、1表示正、负,运算时带来的问题:在计 算机内有符号数和无符号数的表示形式并没有任何 区别,所以,CPU在进行运算时,并不知道参与运 算的数是有符号数还是无符号数, ◇在进行有符号数的运算时,会将符号也当作是数值 进行运算,因而有时会出现错误的结果
2:38:53 原码优缺点 直接用0、1表示正、负,运算时带来的问题:在计 算机内有符号数和无符号数的表示形式并没有任何 区别,所以,CPU在进行运算时,并不知道参与运 算的数是有符号数还是无符号数, 在进行有符号数的运算时,会将符号也当作是数值 进行运算,因而有时会出现错误的结果。 19 13:39 原码的优点是直观易懂,机器数和真值间的转换很 容易,用原码实现乘、除运算的规则简单。缺点是 加、减运算规则较复杂
原码计算存在的问题 ◇两个正数相加时,符号位也同时相加 若两个数之和不超出其所能表示的最大值127时,符号 位相加:0+0=0,即和仍然为正数,结果正确。 例1,两个有符号正数01010111B(87D)和 00010110B(22D)相加。 01010111 +00010110 01101101 其和为01101101B,即十进制的109<127, 符号位为0,表示和为正数,结果正确
2:38:53 原码计算存在的问题 两个正数相加时,符号位也同时相加 若两个数之和不超出其所能表示的最大值127时,符号 位相加:0+0=0,即和仍然为正数,结果正确。 20 13:39 例1,两个有符号正数01010111B(87D)和 00010110B(22D)相加。 其和为01101101B,即十进制的109<127, 符号位为0,表示和为正数,结果正确。 01010111 + 00010110 01101101
原码计算存在的问题 ◇若两个正数之和超出了其所能表示的最大值127时,就 会产生数字位向符号位的进位,两符号位相加0+0=0, 再加上低位进上来的1,则符号位为1,作为有符号数, 表示两个正数相加的和为负数,显然是不对的。 例2,两个有符号正数00110111B(55D)和 0011101B(93D)相加。 00110111 +01011101 和应为+148,但符号位为1,表示 和是负数,错误。 10010100 产生错误的原因是:相加的和148>127,超出了8位有 符号正数所能表示的最大值,对于有符号数,这种数值 运算侵入到符号位造成结果错误的情况,称为溢出
2:38:53 原码计算存在的问题 若两个正数之和超出了其所能表示的最大值127时,就 会产生数字位向符号位的进位,两符号位相加0+0=0, 再加上低位进上来的1,则符号位为1,作为有符号数, 表示两个正数相加的和为负数,显然是不对的。 21 13:39 00110111 + 01011101 10010100 例2,两个有符号正数00110111B(55D)和 01011101B(93D)相加。 和应为+148,但符号位为1,表示 和是负数,错误。 产生错误的原因是:相加的和148>127,超出了8位有 符号正数所能表示的最大值,对于有符号数,这种数值 运算侵入到符号位造成结果错误的情况,称为溢出
原码计算存在的问题 ◇一个正数与一个负数相加,和的符号位不应是 两个符号位直接运算的值:0+1=1 和的符号位应由两数中绝对值大的数所决定 两个负数相加时,由于1+1=10,符号位只表 示0,因此和的符号也不应是由两符号位直接运 算的结果所决定。 ◇为解决机器内有符号数的符号位参加运算的问 题,引入了反码和补码
2:38:53 原码计算存在的问题 一个正数与一个负数相加,和的符号位不应是 两个符号位直接运算的值:0+1=1。 和的符号位应由两数中绝对值大的数所决定。 两个负数相加时,由于1+1=10,符号位只表 示0,因此和的符号也不应是由两符号位直接运 算的结果所决定。 为解决机器内有符号数的符号位参加运算的问 题,引入了反码和补码。 22 13:39