原码、反码和补码概述

原码:原码是计算机中对数字的二进制表示方法,原码的最高位是符号位,0表示正数,1表示负数。

反码:反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。反码的计算是原码的符号位不动,其余的取反。

补码:在计算机系统中,数值一律用补码来表示和存储。补码的计算区分正负数,正数的补码和原码相同,负数的补码是符号位不变,反码加1。

例子:

  • -6:
    • 原码:10000110
    • 反码:11111001
    • 补码:11111010
  • -1:
    • 原码:10000001
    • 反码:11111110
    • 补码:11111111

计算机系统为什么使用补码?

先看例子:

  • 0:用正数表示
    • 原码:00000000
    • 反码:01111111
    • 补码:00000000
  • 0:用负数表示
    • 原码:10000000
    • 反码:11111111
    • 补码:00000000

所以0不管使用正数还是负数表示,它的补码都是一样的。

例子:

-6+5:

    11111010

+  00000101

=  11111111

-4+5:

    11111100

+  00000101

=  00000001

-3+5:

    11111101

+  00000101

=  00000010

可以发现补码做数值相加是非常方便的,-3+5等同于5-3,所以减法也是如此。运算过程是相同的,不需要额外的硬件电路。需要注意的是计算机数值相加,符号位是需要参与运算的。

 

你可能感兴趣的:(计算机基础知识)