计算机编码知识

本文了解计算机编码基础知识

什么是机器码 (原码)?

  • 一个数在计算机中的表示形式是二进制,这个数其实就叫机器数
  • 机器数是带符号的,在计算机用一个数的最高位存放符号,正数为 0, 负数为 1。比如,十进制中的数 +7 ,计算机字长为 8 位,转换成二进制就是 00000111。如果是 -7 ,就是 10000111

什么是反码?

  • 原码除最高位其余位取反,规定:正数的反码和原码相同,负数的反码是原码除了符号位,其余为都取反
  • 如: -1 的原码为 1 0000001 ,反码为 1 1111110

什么是补码?

  • 整数的补码是其本身,负数的补码为其反码加一 ,所以,负数转化为反码需两个步骤, 第一,先转化为反码,第二: 把反码加
  • 如: -1 的反码为 1 1111110,则补码为 1111 1111

为什么要区分原码、反码、补码?

  • 用补码存储,在计算的时候,如果是减法,可以把减法看成加法

  • 数值 1 的二进制是 0000 0001,如果直接使用加法、减法有以下结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    0000 0001
    + 0000 0001
    —————————
    0000 0010 ……………… 2

    0000 0001
    - 0000 0001
    —————————
    1000 0010 ……………… -2
  • 为了避免减法错误,使反码 将减法操作替换为加法操作,结果如下

    1
    2
    3
    4
    0000 0001
    + 1111 1110
    —————————
    1111 1111 ……………… 再转化为原码就是 1000 0000 = -0
  • 反码带来另一个问题是出现 - 0,为了避免这个问题,使补码 ,结果如下

    1
    2
    3
    4
    0000 0001
    + 1111 1111
    —————————
    1 0000 0000 ……………… 由于 char8 位,最高位 1 被丢弃结果为 0 ,运算正确