9.24

今天的课上王老师讲述了方法和递归以及处理大数字与浮点数,老师讲述的编程知识对我来说十分重要。
原码、反码、补码

  1. 基础概念
    计算机底层只有二进制,只有加法器,没有减法器。
    减法不能直接算,所以用补码把减法变成加法
    约定:以8位二进制举例
    符号位:0代表正数,1代表负数
    原码:
    原码 = 符号位 + 真值绝对值的二进制,最符合人的直觉。
  • 正数:+5 → 8位原码:00000101
  • 负数:-5 → 8位原码:10000101
    原码缺点:
  1. 有两个0:+0(00000000)、-0(10000000),一个数字占两个编码,浪费空间
  2. 不能直接做加减运算。
    例:用原码计算:00000001 + 10000001 = 10000010,结果是-2,明显错误。
    所以原码只用来读写,不能直接运算。
    反码:
    反码是过渡产物,用来推导补码,计算机不存储反码。
    规则:
  • 正数:反码 = 原码
  • 负数:符号位不变,数值位全部取反(0变1,1变0)

举例(8位):
+5 原码00000101,反码00000101 -5 原码10000101,反码11111010

反码缺点:
依然存在两个0:00000000(+0)、11111111(-0),加减计算依然有问题。

补码(计算机真正存储、运算的编码)
规则:

  • 正数:补码 = 反码 = 原码
  • 负数:补码 = 反码 + 1

举例(8位):
-5
原码:10000101
反码:11111010
补码:11111011

  1. 只有一个0:00000000
    原来的10000000不再代表-0,直接用来表示-128,多存一个数字。
    8位补码取值范围:[-128, 127]

  2. 减法可以转为加法运算
    示例:计算 1 - 1等价 1 + (-1)
    1的补码:00000001
    -1的补码:11111111
    相加:00000001 + 11111111 = 1 00000000
    8位存储,最高位溢出丢弃,结果00000000,也就是0

posted @ 2026-09-25 14:10  Au1008  阅读(7)  评论(0)    收藏  举报