欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

有符号数的三种表示:原码、反码与补码

最编程 2024-08-01 08:28:14
...

文章目录

  • 一、计算机中的二进制数表示
    • (一)数的表示方法
      • 1、定点数
      • 2、浮点数
        • (1)浮点数概念
        • (2)规格化浮点数
    • (二)数的性质
      • 1、无符号数
      • 2、有符号数
      • 3、数的性质由设计者决定
  • 二、无符号数
    • (一)无符号数的加法
    • (二)无符号数的减法
    • (三)无符号数的乘法
    • (四)无符号数的除法
    • (五)乘除法案例演示
  • 三、有符号数
    • (一)概念
    • (二)表示方法
      • 1、原码
        • (1)概念
        • (2)优点
        • (3)缺点
        • (4)数0的原码
      • 2、反码
        • (1)概念
        • (2)案例
          • 例1、-52的反码
          • 例2、0的反码
      • 3、补码
        • (1)概念
        • (2)案例
          • 例1、-52的补码
          • 例2、0的补码
          • 例3、钟表案例 - 将指针从5点拨到1点
        • (3)补码的算术运算
          • 例1、计算66-51
          • 例2、X = -52 = -0110100,Y = 116 = +1110100,求X + Y的值
          • 例3、X = 34 = +0100010,Y = -52 = -0110100,求X + Y的值
        • (4)编译系统将负数转换成补码
        • (5)特殊数10000000
  • 四、计算机能力的局限性
    • (一)计算机的运算能力是有限的
    • (二)计算机能够表示的数(表数)的范围是有限的
      • 1、无符号整数的表示范围
      • 2、有符号整数的表示范围
        • (1)原码和反码
        • (2)补码
        • (3)对8位二进制数
        • (4)符号数运算中的溢出判断
  • 五、符号二进制数与十进制的转换
    • (一)转换方法
    • (二)计算机中的符号数默认以补码形式表示
    • (三)补码数转换为十进制数
      • 1、对正数
      • 2、对负数
      • 3、案例演示
        • (1)补码最高位是0的情况
        • (2)补码最高位是1的情况

一、计算机中的二进制数表示

(一)数的表示方法

1、定点数

  • 定点数包括定点整数与定点小数
  • 采用定点数的缺点
    ① 编程时需要确定小数点位置
    ② 难以表示两个大小相差较大的数
    ③ 存储空间利用率低

2、浮点数

(1)浮点数概念

  • 小数点的位置可以左右移动的数

(2)规格化浮点数

  • 尾数部分用纯小数表示,即小数点右边第1位不为0
    在这里插入图片描述

(二)数的性质

1、无符号数

  • 数中所有的0和1都是数据本身
  • 各种编码多视为无符号数

2、有符号数

  • 需用0或1表示数的性质(整数)
  • 数值多视为有符号数

3、数的性质由设计者决定

  • 在低级语言程序设计中,根据数的性质由程序语言处理(按无符号数或有符号数处理)。

二、无符号数

(一)无符号数的加法

  • 0 + 0 = 0,0 + 1 = 1 ,1 + 0 = 1, 1 + 1 = 0(有进位)

(二)无符号数的减法

  • 0 - 0 = 0,0 - 1 = 1(有借位) 1 - 0 = 1,1 - 1 = 0

(三)无符号数的乘法

  • 0 × 0 = 0 0 × 1 = 0,1 × 0 = 0,1 × 1 = 1

(四)无符号数的除法

  • 0 ÷ 0 = 0,0 ÷ 1 = 0,1 ÷ 0 = 0 (无意义),1 ÷ 1 = 1

(五)乘除法案例演示

  • 乘法:00001011 × 0100 = 00101100B
  • 除法:00001011 ÷ 0100 = 00000010B
    – 商 = 00000010B
    – 余数 = 11B
  • 每乘以2,相对于被乘数向左移动1位
  • 每除以2,相对于被除数向右移动1位

三、有符号数

(一)概念

  • 用最高位表示符号,其余是数值
  • 0:表示正数
  • 1:表示负数

(二)表示方法

1、原码

(1)概念

  • 最高位为符号位,其余为真值部分
  • [ X ] 原 = 符 号 位 + ∣ 绝 对 值 ∣ [X]_原=符号位+|绝对值| [X]=+

(2)优点

  • 真值和其原码表示之间的对应关系简单,容易理解

(3)缺点

  • 计算机中用原码进行加减运算比较困难
  • 0的表示不唯一

(4)数0的原码

8位数0的原码:

  • + 0 = 0 0000000 +0 = \colorbox{Yellow}00000000 +0=00000000
  • − 0 = 1 0000000 -0 = \colorbox{Yellow}10000000 0=10000000

由此可见,数0的原码不唯一。

2、反码

(1)概念

对一个机器数X:

  • X > 0 X>0 X>0 ,则 [ X ] 反 = [ X ] 原 [X]_反=[X]_原 [X]=[X]
  • X < 0 X<0 X<0, 则 [ X ] 反 = 对 应 原 码 的 符 号 位 不 变 , 数 值 部 分 按 位 求 反 [X]_反=对应原码的符号位不变,数值部分按位求反 [X]=

(2)案例

例1、-52的反码

X = − 52 = − 0110100 X = -52 = -0110100 X=52=0110100

  • [ X ] 原 = 1 0110100 [X]_原=\colorbox{yellow}10110100 [X]=10110100
  • [ X ] 反 = 1 1001011 [X]_反=\colorbox{yellow}11001011 [X]=11001011
例2、0的反码
  • [ + 0 ] 反 = [ + 0 ] 原 = 0 0000000 [+0]_反= [+0]_原= \colorbox{yellow}00000000 [+0]=[+0]=00000000
  • [ − 0 ] 原 = 1 0000000 [-0]_原= \colorbox{yellow}10000000 [0]=10000000
  • [ − 0 ] 反 = 1 1111111 [-0]_反 = \colorbox{yellow}11111111 [0]=11111111

由此可见,数0的反码也不是唯一的。

3、补码

(1)概念

对于机器数X:

  • 若 X > 0 , 则 [ X ] 补 = [ X ] 反 = [ X ] 原 若X>0, 则[X]_补= [X]_反= [X]_原 X>0[X]=[X]=[X]
  • 若 X < 0 , 则 [ X ] 补 = [ X ] 反 + 1 若X<0, 则[X]_补= [X]_反+1 X<0[X]=[X]+1

(2)案例

例1、-52的补码

X = – 52 = – 0110100 X= – 52= – 0110100 X=52=0110100

  • [ X ] 原 = 1 0110100 [X]_原=\colorbox{yellow}10110100 [X]=10110100
  • [ X ] 反 = 1 1001011 [X]_反=\colorbox{yellow}11001011 [X]=11001011
  • [ X ] 补 = [ X ] 反 + 1 = 1 1001100 [X]_补= [X]_反+1=\colorbox{yellow}11001100 [X]=[X]+1=11001100
例2、0的补码
  • [ + 0 ] 补 = [ + 0 ] 原 = 0 0000000 [+0]_补= [+0]_原=\colorbox{yellow}00000000 [+0]=[+0]=00000000
  • [ − 0 ] 补 = [ − 0 ] 反 + 1 = 1 1111111 + 1 = 1 0 0000000 = 0 0000000 [-0]补= [-0]_反+1=\colorbox{yellow}11111111+1 =\colorbox{red}1\colorbox{yellow}00000000=\colorbox{yellow}00000000 [0]=[0]+1=11111111+1=100000000=00000000
  • 说明:对8位字长,进位(红色1)被舍掉
例3、钟表案例 - 将指针从5点拨到1点

两钟拨法:

  • 逆时钟拨: 5 − 4 = 1 5 - 4 = 1 54=1
  • 顺时钟拨: 5 + 8 = 13 = 12 + 1 = 1 5 + 8 = 13= \colorbox{red}{12} + 1 = 1 5+8=13=12+1=1 12 12 12为模,自动丢失)

对模12,减法变加法

  • [ − 4 ] 补 = 12 − 4 = 8 [-4]_补=12-4=8 [4]=124=8 8 8 8 − 4 -4 4的补数)
  • 5 − 4 = 5 + 8 5-4=5+8 54=5+8
  • 5 − 4 = 5 + ( − 4 ) = 5 + ( 12 − 4 ) = 5 + 8 = 12 + 1 = 1 5-4=5+(-4)=5+(12-4)=5+8=\colorbox{red}{12} +1=1 54=5+(4)=5+(124)=5+8=12+1=1

(3)补码的算术运算

通过引进补码,可将减法运算转换为加法运算。

  • [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X+Y]_补=[X]_补+[Y]_补 [X+Y]=[X]+[Y]
  • [ X − Y ] 补 = [ X + ( − Y ) ] 补 = [ X ] 补 + [ − Y ] 补 [X-Y]_补=[X+(-Y)]_补 =[X]_补+[-Y]_补 [XY]=[X+(Y)]=[X]+[Y]
例1、计算66-51

66 − 51 = 66 + ( − 51 ) = 15 66-51=66+(-51)=15 6651=66+(51)=15
用二进制补码运算:

  • [ + 66 ] 补 = [ + 66 ] 原 = 0 1000010 [+66]_补= [+66]_原= \colorbox{yellow}01000010 [+66]=[+66]=01000010
  • [ − 51 ] 原 = 1 0110011 [-51]_原=\colorbox{yellow}10110011 [51]=10110011
  • [ − 51 ] 补 = 1 1001101 [-51]_补=\colorbox{yellow}11001101 [51]=11001101
  • [ 66 − 51 ] 补 = [ + 66 ] 补 + [ − 51 ] 补 = 1 0 0001111 = 0 0001111 = 15 [66-51]_补=[+66]补+ [-51]补= \colorbox{red}1\colorbox{yellow}00001111=\colorbox{yellow}00001111=15 [6651]=[+66]+[51]=100001111=00001111=15
例2、X = -52 = -0110100,Y = 116 = +1110100,求X + Y的值
  • [ X ] 原 = 1 0110100 [X]_原=\colorbox{yellow}10110100 [X]=10110100
  • [ X ] 补 = [ X ] 反 + 1 = 1 1001100 [X]_补= [X]_反+1=\colorbox{yellow}11001100 [X]=[X]+1=11001100
  • [ Y ] 补 = [ Y ] 原 = 0 1110100 [Y]_补= [Y]_原=\colorbox{yellow}01110100 [Y]=[Y]=01110100
  • [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 = 1 1001100 + 0 1110100 = 0 1000000 [X+Y]_补= [X]_补+ [Y]_补=\colorbox{yellow}11001100+\colorbox{yellow}01110100=\colorbox{yellow}01000000 [X+Y]=[X]

    上一篇: 简单易懂的Python基础回顾指南

    下一篇: 随意变换的Transformer技术 - 资源指南

推荐阅读