自学教程 学编程从这里开始

数据的表示与运算

本课目标

理解计算机为什么使用二进制;掌握进制转换、定点/浮点数表示;了解原码、反码、补码;熟悉基本算术逻辑运算,明白计算机底层如何存储和处理各类数据。

2.1 计算机为什么采用二进制 Binary

计算机硬件电路只有两种稳定状态:通电/断电、高电平/低电平,正好对应 1 和 0。

  • 优势:硬件实现简单、抗干扰能力强,运算规则少;
  • 缺点:人类读写不方便,所以日常使用十进制,需要进制互相转换。

补充:八进制 Oct、十六进制 Hex 是二进制的简写形式,方便程序员书写二进制串。1位十六进制 = 4位二进制。

2.2 进制转换

十进制 → 二进制

  • 整数部分:除2取余,逆序排列
  • 小数部分:乘2取整,顺序排列

二进制 → 十进制

按权展开求和:每一位数字 × 2的位权次方,累加得到十进制。
例:$(1011)_2 = 1×2^3 + 0×2^2 +1×2^1 +1×2^0 = 11$

2.3 机器数与真值

现实数字有正负,但计算机只能存0和1。
把符号数字化:最高位作为符号位,0代表正数,1代表负数。

  • 真值(True Value):带正负号的实际数值,例如 $-1011$
  • 机器数(Machine Number):存放在计算机里的二进制编码,例如 11011

机器数有三种常用编码:原码、反码、补码

原码 Original Code

符号位+数值本身绝对值。
优点:直观,和真值转换简单。
缺点:0有两种表示 +0、-0;减法不能直接做,硬件实现复杂。

反码 One’s Complement

  • 正数反码 = 原码
  • 负数反码:符号位不变,数值位全部按位取反

    依然存在两个0,一般不用于运算,多用于过渡。

补码 Two’s Complement(重点)

计算机实际运算使用补码

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

    特点:
  1. 0只有唯一编码;
  2. 减法可以转换成加法运算,CPU只需要一套加法电路,大幅简化硬件。

2.4 定点数与浮点数

定点数 Fixed-point Number

小数点位置固定不变。

  • 定点整数:小数点在最低位右侧
  • 定点小数:小数点在符号位与数值位之间

    优点:硬件简单;缺点:表示范围很小。

浮点数 Floating-point Number

类似科学计数法:$N = M × 2^E$

  • 尾数 Mantissa(M):决定数值精度
  • 阶码 Exponent(E):决定数值表示范围

    IEEE754 是通用浮点数标准:
  • 单精度 float:32位,1位符号 + 8位阶码 + 23位尾数
  • 双精度 double:64位,1位符号 + 11位阶码 + 52位尾数

⚠️ 浮点数存在精度丢失,小数不能无限精确存储。

2.5 算术运算与逻辑运算

算术运算 Arithmetic Operation

补码加法:$[A+B]{补} = [A]{补}+[B]_{补}$,溢出需要做判断。

溢出 Overflow:运算结果超出当前字长能表示范围,结果出错。注意区分溢出和进位。

逻辑运算 Logic Operation

按位操作,每一位独立运算,没有进位:

  • 逻辑与 AND:全1出1
  • 逻辑或 OR:有1出1
  • 逻辑非 NOT:0变1,1变0
  • 异或 XOR:相同为0,不同为1

本课小结

计算机底层只用二进制存储信息。正负号编码为机器数,现代CPU依靠补码把减法转为加法,降低硬件成本。定点数适合小范围整数;浮点数利用阶码+尾数,用来表示大数和小数,但会有精度损失。ALU负责完成算术、逻辑运算。

思考练习

  1. 计算机为什么选择二进制,而不是十进制?
  2. 简述原码、反码、补码的区别,为什么计算机运算使用补码?
  3. IEEE754单精度浮点数分为哪三部分?
标签:

0 条笔记