1. 二进制与十进制:计算机世界的语言转换
计算机本质上只能理解0和1组成的二进制语言,而人类更习惯使用十进制。这两种进制之间的转换是计算机基础中的基础。
二进制转十进制的通用方法是"按权展开求和"。举个例子,二进制数11001010B转换成十进制的过程是这样的:
- 从右到左给每一位编号(从0开始):
- 1(7) 1(6) 0(5) 0(4) 1(3) 0(2) 1(1) 0(0)
- 计算每一位的值(该位的数字×2的位数次方):
- 1×2⁷ + 1×2⁶ + 0×2⁵ + 0×2⁴ + 1×2³ + 0×2² + 1×2¹ + 0×2⁰
- 计算结果:
- 128 + 64 + 0 + 0 + 8 + 0 + 2 + 0 = 202
十进制转二进制则通常采用"除2取余法"。以十进制数25为例:
- 25 ÷ 2 = 12 余1
- 12 ÷ 2 = 6 余0
- 6 ÷ 2 = 3 余0
- 3 ÷ 2 = 1 余1
- 1 ÷ 2 = 0 余1
- 将余数从下往上排列:11001B
常见错误点:
- 位数编号错误(应该从右到左从0开始)
- 忘记最后一位的2⁰=1
- 转换时漏掉中间的0
实用技巧:记住2的幂次方值可以加快计算速度:
- 2⁰=1, 2¹=2, 2²=4, 2³=8, 2⁴=16
- 2⁵=32, 2⁶=64, 2⁷=128, 2⁸=256
2. 十六进制:程序员的最佳伙伴
十六进制(0-9,A-F)因其与二进制的天然对应关系(1位十六进制=4位二进制),成为程序员最爱的进制表示法。
十六进制转十进制同样采用按权展开法。以12CH为例:
- 从右到左编号:1(2) 2(1) C(0)
- C在十六进制中表示12
- 计算:1×16² + 2×16¹ + 12×16⁰ = 256 + 32 + 12 = 300
十进制转十六进制使用"除16取余法"。以1470为例:
- 1470 ÷ 16 = 91 余14(E)
- 91 ÷ 16 = 5 余11(B)
- 5 ÷ 16 = 0 余5
- 从下往上排列:5BEH
二进制与十六进制快速转换技巧:
- 二进制转十六进制:从右往左每4位一组,不足补零
- 例:10100100B → 1010 0100 → A4H
- 十六进制转二进制:每一位展开为4位二进制
- 例:3A8DH → 0011 1010 1000 1101B
应用场景:
- 内存地址表示(如0xFFFF0000)
- 颜色编码(如#FF0000表示红色)
- 机器码和汇编指令表示
3. BCD码:数字的另一种编码方式
BCD(Binary-Coded Decimal)码用4位二进制表示1位十进制数,虽然浪费存储空间但便于十进制运算。
标准BCD码转换:
- 每位十进制数转换为4位二进制
- 例:327 → 3(0011) 2(0010) 7(0111) → 001100100111B
常见错误:
- 混淆BCD码与直接二进制表示
- 忘记每位必须用4位表示
- 使用超出9(1001)的编码
扩展BCD码:
- 压缩BCD码:用4位表示0-9
- 非压缩BCD码:用8位(高4位为0)表示0-9
- EBCDIC编码:IBM大型机使用的8位BCD扩展编码
实际应用:
- 金融系统(避免二进制浮点数精度问题)
- 电子秤、计价器等需要精确十进制表示的设备
- 实时时钟芯片(时间通常以BCD格式存储)
4. ASCII码:字符的数字化表示
ASCII(美国标准信息交换码)用7位二进制数表示128个字符,是计算机文本处理的基础。
字符转换示例:
- 'A' → 65 → 01000001B → 41H
- 'a' → 97 → 01100001B → 61H
- '0' → 48 → 00110000B → 30H
字符串转换:
- "About":
- A(41H) b(62H) o(6FH) u(75H) t(74H)
- "95":
- 9(39H) 5(35H)
ASCII码表重要分区:
- 0-31:控制字符(如回车CR、换行LF)
- 32-126:可打印字符(字母、数字、标点)
- 127:删除DEL
- 128-255:扩展ASCII(不同系统定义不同)
常见问题:
- 混淆大小写字母编码(相差32)
- 忘记数字'0'的编码是48不是0
- 忽略不可见控制字符的影响
5. 原码、反码和补码:带符号数的表示
计算机用最高位表示符号(0正1负),但具体表示方法有三种:
原码:
- 最高位为符号位,其余为绝对值
- +42 → 0 0101010B
- -42 → 1 0101010B
反码:
- 正数同原码
- 负数:符号位不变,其余位取反
- -42 → 1 1010101B
补码:
- 正数同原码
- 负数:反码+1
- -42 → 1 1010110B
为什么使用补码:
- 解决了±0的问题(补码中0只有一种表示)
- 加减法可以统一用加法器实现
- 扩大了表示范围(8位补码可表示-128~+127)
转换练习: -85的表示:
- 原码:1 1010101B(最高位1表示负,其余是85的二进制)
- 反码:1 0101010B(符号位不变,其余取反)
- 补码:1 0101011B(反码+1)
溢出判断:
- 同号相加结果符号相反 → 溢出
- 异号相加不会溢出
- CPU有溢出标志位OF
6. 冯·诺依曼结构:现代计算机的基石
冯·诺依曼提出的存储程序计算机结构至今仍是计算机设计的基础,包含五大部件:
核心组成:
- 运算器(ALU):执行算术逻辑运算
- 控制器:取指令、译码、执行控制
- 存储器:存储程序和数据
- 输入设备:将信息输入计算机
- 输出设备:将结果输出
工作流程:
- 程序和数据通过输入设备存入存储器
- 控制器从存储器取指令
- 控制器译码并发出控制信号
- 运算器执行指令要求的操作
- 结果存回存储器或通过输出设备输出
- 重复2-5直到程序结束
关键特征:
- 二进制表示
- 存储程序原理
- 顺序执行(除非有跳转指令)
- 运算器为中心
现代演变:
- 哈佛结构:分离指令和数据存储器
- 多核处理器:多个运算核心
- 缓存体系:多级缓存提高速度
- 并行计算:突破顺序执行限制
7. 计算机的硬件与软件
硬件是物理设备,软件是程序和数据,两者缺一不可。
硬件组成:
- 核心部件:CPU、内存、主板
- 存储设备:硬盘、SSD
- 输入设备:键盘、鼠标
- 输出设备:显示器、打印机
- 通信设备:网卡、调制解调器
软件分类:
- 系统软件:
- 操作系统(Windows、Linux)
- 设备驱动程序
- 工具软件(编译器、调试器)
- 应用软件:
- 办公软件
- 多媒体软件
- 专业领域软件
硬件软件关系:
- 硬件是躯体,软件是灵魂
- 软件通过硬件执行
- 硬件性能决定软件运行效率
- 软件需求推动硬件发展
抽象层次:
- 物理层:晶体管、电路
- 逻辑层:门电路、寄存器
- 架构层:指令集、微架构
- 系统层:操作系统、运行时
- 应用层:用户程序
8. 编程语言的发展与分类
计算机语言从低级到高级不断发展,各有特点和应用场景。
机器语言:
- 二进制指令代码
- 计算机直接执行
- 依赖特定硬件
- 难编写、难维护
- 示例:0x90(x86的NOP指令)
汇编语言:
- 助记符表示指令
- 需要汇编器翻译
- 接近硬件,效率高
- 可读性优于机器语言
- 示例:MOV AX, 0x1234
高级语言:
- 接近自然语言和数学表达
- 需要编译器或解释器
- 可移植性好
- 开发效率高
- 示例:C、Java、Python
语言选择考量:
- 执行效率:机器/汇编 > C > Java/Python
- 开发效率:Python > Java > C > 汇编
- 硬件控制:汇编 > C > Java > Python
- 可移植性:Python/Java > C > 汇编
现代趋势:
- 领域特定语言(DSL)
- 多范式融合
- 即时编译(JIT)技术
- 自动并行化
9. 微型计算机的基本结构
微型计算机采用总线结构连接各功能部件,提高系统灵活性。
核心组件:
微处理器(CPU):
- 运算器:算术逻辑运算
- 控制器:指令控制
- 寄存器组:高速存储
存储器:
- RAM:随机存取,易失性
- ROM:只读,非易失性
- 缓存:高速小容量
I/O接口:
- 并行接口(如LPT)
- 串行接口(如COM)
- 专用接口(如SATA)
总线:
- 数据总线:双向传输数据
- 地址总线:单向指定地址
- 控制总线:传输控制信号
典型芯片:
- 8086:16位,1MB寻址
- 80386:32位,4GB寻址
- 现代CPU:64位,TB级寻址
性能指标:
- 主频:GHz级别
- 字长:64位主流
- 寻址能力:由地址总线宽度决定
- 吞吐量:单位时间处理能力
10. 计算机术语解析
计算机领域充满英文缩写,理解这些术语对学习至关重要。
核心术语:
ALU(Arithmetic Logic Unit):
- 算术逻辑单元
- CPU的核心部件
- 执行加减乘除与或非等运算
CPU(Central Processing Unit):
- 中央处理器
- 计算机的大脑
- 包含ALU、CU、寄存器等
PC(Program Counter/Personal Computer):
- 程序计数器:存放下条指令地址
- 个人计算机:微型计算机的俗称
DOS(Disk Operating System):
- 磁盘操作系统
- 早期PC主流操作系统
- 命令行界面
总线类型:
- 数据总线:传输数据,双向
- 地址总线:指定内存位置,单向
- 控制总线:传输控制信号
存储层次:
- 寄存器:最快,容量最小
- 缓存:SRAM,分多级
- 主存:DRAM,易失性
- 外存:磁盘/SSD,非易失性
11. 8086与80386架构对比
Intel处理器的发展反映了计算机技术的进步。
8086特征:
- 16位架构
- 20位地址总线
- 1MB寻址空间
- 16位数据总线
- 无保护模式
- 1978年发布
80386特征:
- 32位架构
- 32位地址总线
- 4GB寻址空间
- 32位数据总线
- 引入保护模式
- 1985年发布
关键改进:
寻址能力:
- 8086:1MB(2²⁰)
- 80386:4GB(2³²)
寄存器宽度:
- 8086:16位通用寄存器
- 80386:扩展为32位(EAX等)
工作模式:
- 实模式(兼容8086)
- 保护模式(现代OS基础)
- 虚拟8086模式(运行多个DOS程序)
编程影响:
- 内存分段:
- 8086:16位段+16位偏移
- 80386:保护模式平坦模型
- 指令扩展:
- 32位操作数支持
- 新增保护模式指令
12. 数制转换实战技巧
掌握快速转换技巧可以大大提高解题效率。
二进制快速转十进制:
- 记住2的幂次方值
- 对1的位快速相加
- 例:10100100B
- 128 + 32 + 4 = 164
十进制转二进制捷径:
- 找到最接近的2的幂次
- 例:134:
- 128(2⁷) + 4(2²) + 2(2¹)
- 10000000 + 00000100 + 00000010 = 10000110B
十六进制与二进制对应表:
0:0000 4:0100 8:1000 C:1100 1:0001 5:0101 9:1001 D:1101 2:0010 6:0110 A:1010 E:1110 3:0011 7:0111 B:1011 F:1111负数补码快速计算:
- 写出正数的二进制
- 从右找到第一个1
- 这个1左边的所有位取反
- 例:-42:
- +42:00101010
- 第一个1在最右边
- 左边全取反:11010110
13. 计算机工作原理深度解析
理解计算机如何执行程序是掌握计算机原理的关键。
指令周期:
取指阶段:
- PC送地址总线
- 存储器返回指令
- 存入指令寄存器
译码阶段:
- 指令译码器分析操作码
- 确定操作数和操作类型
执行阶段:
- ALU执行运算
- 内存或I/O访问
- 结果写回寄存器或内存
写回阶段:
- 将结果写入目标位置
- 更新PC(顺序或跳转)
性能优化:
- 流水线技术:重叠执行多个指令阶段
- 超标量:多个执行单元并行
- 乱序执行:提高指令级并行度
- 分支预测:减少流水线停顿
现代CPU特性:
- 多级缓存:减少内存访问延迟
- 多核并行:线程级并行
- SIMD指令:单指令多数据
- 功耗管理:动态频率调整
14. 课后习题精解
通过典型习题巩固所学知识,掌握解题技巧。
数制转换题:
- 二进制转十进制:按权展开
- 十六进制转十进制:同样方法
- 十进制转二进制/十六进制:除基取余
原反补码题:
- 正数:三者相同
- 负数:
- 原码:符号位1,其余绝对值
- 反码:符号位不变,其余取反
- 补码:反码+1
ASCII码题:
- 查表或记忆常见字符编码
- 大小写字母差32(20H)
- 数字'0'是48(30H)
冯氏结构题:
- 五大部分及其功能
- 存储程序原理
- 顺序执行流程
硬件软件题:
- 硬件举例:CPU、内存、硬盘
- 软件分类:系统、应用
- 相互关系:硬件是载体,软件是灵魂
15. 常见问题与误区
学习过程中容易出现的错误理解和常见问题。
数制转换误区:
- 混淆权值编号方向(应从右向左从0开始)
- 忘记2⁰=1导致计算结果少1
- 十六进制A-F对应错误
原反补码混淆:
- 认为负数补码就是原码取反(漏了+1)
- 忽略+0和-0在原码中的不同表示
- 补码范围理解错误(8位是-128~127)
存储器理解错误:
- 混淆内存和硬盘
- 不理解易失性概念
- 忽略地址总线与存储容量的关系
CPU工作误解:
- 认为时钟周期就是执行一条指令的时间
- 不理解流水线技术
- 混淆字长和寻址能力
实用建议:
- 多画二进制位权图
- 制作ASCII码速查表
- 用实际数字验证转换结果
- 理解而非死记硬背