整数的存储方式

  • 生活中的整数分为 正整数与负整数,例如 15 与 -15。
  • 计算机如何表示负数?
    • 计算机内部采用二进制来存储数据,例如一个自己的00001111。
  • 什么是有符号数和无符号数?
    • 有符号数的二进制由符号位和数据位组成。
    • 有符号数的符号位如果是0,那就表示这个二进制数是正数。
    • 有符号数的符号位如果是1,那就表示这个二进制数是负数。
    • 无符号数的二进制由数据位组成,不能表示负数,最小值是0。
  • char 0-65535 2个字节 无符号的整数
  • short -32768-32767 2个字节 有符号的整数

原码、反码、补码的介绍和换算

原码、反码、补码 都是数据二进制的表示方式。

  • 原码

    • 十进制的 +15 二进制原码 0000 1111
    • 十进制的 -15 二进制原码 1000 1111
  • 反码

    • 整数的反码 就是原码
    • 负数的反码就是原码的最高位不变,其他位取反
    • 十进制的 +15 二进制原码 0000 1111 二进制反码 0000 1111
    • 十进制的 -15 二进制原码 1000 1111 二进制反码 1111 0000
  • 补码

    • 整数的补码,就是原码
    • 负数的补码,就是反码加1
    • 十进制的 +15 二进制原码 0000 1111 二进制反码 0000 1111 二进制补码 0000 1111
    • 十进制的 -15 二进制原码 1000 1111 二进制反码 1111 0000 二进制补码 1111 0001

总结:

  1. 整数的原码、反码、补码都是一样的
  2. 负数的原码求补码,原码的最高位不变,其他数据位取反得到反码。反码再加1就得到补码
  3. 负数的补码求原码,补码减1得到反码,然后是反码的最高位不变,其他数据位取反得到原码

计算机为什么要使用补码存储、计算数据

计算机使用补码储存数据、计算数据,为什么不使用原码与反码呢?
引入四个整数的原码

  1. +1 原码 0000 0001
  2. -1 原码 1000 0001
  3. +0 原码 0000 0000
  4. -0 原码 1000 0000
  • CPU内部只有加法器。
  • 需求1:需要使用原码来计算 1 - 1

    • 1 - 1 = 1 + -1
    • 0000 0001 + 1000 0001 = 1000 0010 换算成十进制就是-2
    • 0使用原码有两个表示方式
    • 原码表示的数据在运算的时候得到的结果都是错误的
  • 需求2:使用反码来计算 1-1

    • +1 原码 0000 0001 反码 0000 00001
    • -1 原码 1000 0001 反码 1111 1110
    • +0 原码 0000 0000 反码 0000 0000
    • -0 原码 1000 0000 反码 1111 1111
    • 1-1 = 1+ -1
    • 0000 0001 + 1111 1110 = 1111 1111
    • 为什么不使用反码存储、计算数据的原因
      • 0使用反码还是有两种表示方式
  • 需求3:使用补码计算 1-1

    • +1 原码 0000 0001 反码 0000 00001 补码 0000 0001
    • -1 原码 1000 0001 反码 1111 1110 补码 1111 1111
    • +0 原码 0000 0000 反码 0000 0000 补码 0000 0000
    • -0 原码 1000 0000 反码 1111 1111 补码0000 0000
    • 1-1 = 1+ -1
    • 0000 0001 + 1111 1111 = 0000 0000

补码解决了原码和反码再存储数以及计算数据的问题。因此计算机使用补码来存储和计算。