原码反码补码

源码反码补码

  • 计算机中常见数据的分类
  • 机器数&真值
  • 原码
  • 反码
  • 补码
  • 扩展知识

计算机中常见的数据的分类

  • 数据分类
    • 数值类型
      • 整数
      • 浮点数
    • 非数值类型
      • 图片
      • 视频
      • 音频
      • 文字

机器数

  • 机器数:数值在计算机中的二进制表示形式。机器数是带有符号的。
    • 机器数的最高位是符号位,0表示正数,1表示负数
    • int -> 整数 4个字节 32位 -2^31- 2^32-1,最高位为符号位

真值

  • 机器数所对应的二进制的真正的数值
    • 1000 0111=-7 -7就是1000 0111 的真值

原码

  • 原码就是符号位加上真值的绝对值

    • 正数:符号位 有效位 +11 000 1011

      ​ 0 000 1011 —> 1000 1011

    • 负数:符号位 有效位 -15 000 1111

      ​ 1 000 1111 —> 1000 1111

求原码:

34 0010 0010

-39 1010 0111

-55 1011 0111

反码

  • 正数:正数的反码等于原码

  • 负数:符号位不变,其余各位逐一取反,

    -49 原码 1011 0001 反码 1100 1110

    -36 原码 1010 0100 反码 1101 1011

补码

  • 正数:正数的补码等于原码
  • 负数:负数的补码等于反码加一

-65 原码 1100 0001 反码 1011 1110 补码 1011 1111

-37 原码 1010 0101 反码 1101 1010 补码 1101 1011

-120 原码 1111 1000 反码 1000 0111 补码 1000 1000

扩展知识

为什么需要原码和补码?

在设计计算机时,只设计了加法器,没有设计减法器;

5-3=5+(-3)

原码
        5=0000 0101

     -3=1000 0011   

相加后: 1000 1000=-8 不对

说明原码不能直接相加

反码

​ 解决了只设计了加法器,使用加法器进行减法运算的问题

​ 缺点:正负相加等于0的表示不唯一

如 1 +(-1)=0

0000 0001 + 1000 0000 =1111 1111[反] =1000 0000[原]=-0

0的表示不唯一

将补码转换为原码
  • 补码减一,取反

  • 把补码当原码,求补码

    1000 0000 1000 0000 == -128

反码 1111 1111 0111 1111

补码 1111 1111 1000 0000

你可能感兴趣的:(原码反码补码)