# 2.1 数制与编码 ## 一、进位计数制 ### 1.1 进位计数制的基本概念 **进位计数制**: - 按进位方式计数的数制 - 由基数和位权组成 **基数(Radix)**: - 数制中所用的数字符号个数 - 如:二进制的基数为2 **位权(Weight)**: - 每个数位所代表的数值大小 - 第i位的位权 = 基数^i ### 1.2 常用进位计数制 | 数制 | 基数 | 数字符号 | 后缀 | |-----|------|---------|------| | 二进制 | 2 | 0, 1 | B | | 八进制 | 8 | 0-7 | O/Q | | 十进制 | 10 | 0-9 | D | | 十六进制 | 16 | 0-9, A-F | H | ### 1.3 不同数制的表示 **二进制**: - 基数:2 - 位权:... 2³, 2², 2¹, 2⁰, 2⁻¹, 2⁻² ... - 例子:(1011.01)₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 0×2⁻¹ + 1×2⁻² = 11.25 **八进制**: - 基数:8 - 位权:... 8³, 8², 8¹, 8⁰, 8⁻¹, 8⁻² ... - 例子:(37.5)₈ = 3×8¹ + 7×8⁰ + 5×8⁻¹ = 31.625 **十进制**: - 基数:10 - 位权:... 10³, 10², 10¹, 10⁰, 10⁻¹, 10⁻² ... - 例子:(123.45)₁₀ = 1×10² + 2×10¹ + 3×10⁰ + 4×10⁻¹ + 5×10⁻² **十六进制**: - 基数:16 - 位权:... 16³, 16², 16¹, 16⁰, 16⁻¹, 16⁻² ... - 例子:(2A.8)₁₆ = 2×16¹ + 10×16⁰ + 8×16⁻¹ = 42.5 --- ## 二、数制转换 ### 2.1 其他进制转十进制 **方法**:按权展开求和 **公式**: ``` N = Σ(d_i × r^i) ``` 其中: - d_i:第i位的数字 - r:基数 - i:位序(从右到左,从0开始) **例子**: - (1011)₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11 - (2A)₁₆ = 2×16¹ + 10×16⁰ = 32 + 10 = 42 ### 2.2 十进制转其他进制 **整数部分:除基取余法** **方法**: 1. 用十进制数除以基数,得到商和余数 2. 余数作为低位数字 3. 用商继续除以基数 4. 重复直到商为0 5. 余数从后往前排列 **例子**:十进制转二进制 ``` 11 ÷ 2 = 5 余 1 5 ÷ 2 = 2 余 1 2 ÷ 2 = 1 余 0 1 ÷ 2 = 0 余 1 (11)₁₀ = (1011)₂ ``` **小数部分:乘基取整法** **方法**: 1. 用十进制小数乘以基数,得到整数部分和小数部分 2. 整数部分作为高位数字 3. 用小数部分继续乘以基数 4. 重复直到小数部分为0或达到精度要求 **例子**:十进制转二进制 ``` 0.625 × 2 = 1.25 取整 1 0.25 × 2 = 0.5 取整 0 0.5 × 2 = 1.0 取整 1 (0.625)₁₀ = (0.101)₂ ``` ### 2.3 二进制与八进制转换 **二进制转八进制**: - 3位二进制 = 1位八进制 - 整数部分从右向左分组 - 小数部分从左向右分组 - 不足3位补0 **例子**: ``` (1011101.01101)₂ = (001 011 101 . 011 010)₂ = (1 3 5 . 3 2)₈ ``` **八进制转二进制**: - 1位八进制 = 3位二进制 **例子**: ``` (135.32)₈ = (001 011 101 . 011 010)₂ = (1011101.01101)₂ ``` ### 2.4 二进制与十六进制转换 **二进制转十六进制**: - 4位二进制 = 1位十六进制 - 整数部分从右向左分组 - 小数部分从左向右分组 - 不足4位补0 **例子**: ``` (1011101.01101)₂ = (0101 1101 . 0110 1000)₂ = (5 D . 6 8)₁₆ ``` **十六进制转二进制**: - 1位十六进制 = 4位二进制 **例子**: ``` (5D.68)₁₆ = (0101 1101 . 0110 1000)₂ = (1011101.01101)₂ ``` --- ## 三、真值和机器数 ### 3.1 真值 **真值**: - 带有正负号的实际数值 - 如:+1011, -1011 ### 3.2 机器数 **机器数**: - 在计算机中表示的数值 - 用0和1表示 - 符号位 + 数值位 **符号位**: - 0表示正数 - 1表示负数 **例子**: - 真值:+1011 - 机器数:01011(假设5位) --- ## 四、原码、反码、补码 ### 4.1 原码 **定义**: - 最高位为符号位(0正1负) - 其余位为数值的绝对值 **表示范围(n位)**: ``` -(2^(n-1) - 1) ~ +(2^(n-1) - 1) ``` **例子(8位)**: - +13 = 00001101 - -13 = 10001101 **特点**: - 表示简单直观 - 0有两种表示:+0 = 00000000, -0 = 10000000 - 运算复杂 ### 4.2 反码 **定义**: - 正数的反码 = 原码 - 负数的反码 = 原码符号位不变,数值位取反 **表示范围(n位)**: ``` -(2^(n-1) - 1) ~ +(2^(n-1) - 1) ``` **例子(8位)**: - +13 = 00001101 - -13 = 11110010 **特点**: - 0有两种表示:+0 = 00000000, -0 = 11111111 - 运算比原码简单 ### 4.3 补码 **定义**: - 正数的补码 = 原码 - 负数的补码 = 反码 + 1(末位加1) - 或:2^n + X(n位,X为负数) **表示范围(n位)**: ``` -2^(n-1) ~ +(2^(n-1) - 1) ``` **例子(8位)**: - +13 = 00001101 - -13 = 11110011 **特点**: - 0只有一种表示:00000000 - 运算简单,符号位参与运算 - 现代计算机普遍采用 ### 4.4 三种码制的比较 | 特性 | 原码 | 反码 | 补码 | |-----|------|------|------| | 符号位 | 0正1负 | 0正1负 | 0正1负 | | 正数表示 | 符号位+数值 | 同原码 | 同原码 | | 负数表示 | 符号位+数值 | 数值位取反 | 反码+1 | | 0的表示 | 两种 | 两种 | 一种 | | 表示范围 | -(2^(n-1)-1) ~ +(2^(n-1)-1) | -(2^(n-1)-1) ~ +(2^(n-1)-1) | -2^(n-1) ~ +(2^(n-1)-1) | | 运算 | 复杂 | 较简单 | 最简单 | | 应用 | 很少 | 很少 | 普遍使用 | --- ## 五、移码 ### 5.1 什么是移码 **移码(Excess-N / Offset Binary)**: - 在补码的基础上符号位取反 - 用于表示浮点数的阶码 **定义**: ``` [X]移 = 2^(n-1) + X ``` **例子(8位)**: - +13 = 10001101 - -13 = 01110011 ### 5.2 移码的特点 - 保持了数据的大小顺序 - 便于比较大小 - 0的表示唯一:10000000 ### 5.3 移码与补码的关系 ``` [X]移 = [X]补 符号位取反 ``` --- ## 六、BCD码 ### 6.1 什么是BCD码 **BCD(Binary-Coded Decimal)**: - 二进制编码的十进制 - 用4位二进制表示1位十进制数 ### 6.2 8421码 **定义**: - 4位二进制,权值为8、4、2、1 - 最常用 **编码表**: | 十进制 | 8421码 | |--------|--------| | 0 | 0000 | | 1 | 0001 | | 2 | 0010 | | 3 | 0011 | | 4 | 0100 | | 5 | 0101 | | 6 | 0110 | | 7 | 0111 | | 8 | 1000 | | 9 | 1001 | **例子**: - (59)₁₀ = (0101 1001)₈₄₂₁ ### 6.3 其他BCD码 **2421码**: - 权值为2、4、2、1 - 自补码 **余3码**: - 8421码 + 0011 - 自补码 **格雷码**: - 相邻编码只有一位不同 - 减少错误 --- ## 七、字符编码 ### 7.1 ASCII码 **ASCII(American Standard Code for Information Interchange)**: - 美国信息交换标准代码 - 7位编码,128个字符 **组成**: - 0-31:控制字符 - 32-126:可打印字符 - 127:DEL **常用字符**: - '0' = 48 (0x30) - 'A' = 65 (0x41) - 'a' = 97 (0x61) - 空格 = 32 (0x20) ### 7.2 扩展ASCII码 **8位ASCII**: - 最高位为0:标准ASCII - 最高位为1:扩展字符(各国文字) ### 7.3 Unicode **Unicode**: - 统一字符编码 - 为世界上所有字符分配唯一的编码 **UTF-8**: - Unicode的一种编码方式 - 变长编码(1-4字节) - 兼容ASCII **UTF-16**: - 2或4字节 - Windows常用 --- ## 八、校验码 ### 8.1 奇偶校验码 **奇校验**: - 数据位 + 校验位中1的个数为奇数 **偶校验**: - 数据位 + 校验位中1的个数为偶数 **特点**: - 只能检测奇数位错误 - 不能纠错 ### 8.2 海明码 **海明码(Hamming Code)**: - 可以检测并纠正单比特错误 - 在数据位中插入校验位 **校验位位置**: - 2^i的位置(1, 2, 4, 8, ...) ### 8.3 循环冗余校验码(CRC) **CRC(Cyclic Redundancy Check)**: - 用于数据通信和存储 - 检错能力强 - 见计算机网络部分 --- ## 九、考研重点 1. **进位计数制**: - 基本概念(基数、位权) - 常用数制(二进制、八进制、十进制、十六进制) 2. **数制转换**: - 其他进制转十进制 - 十进制转其他进制 - 二进制与八进制转换 - 二进制与十六进制转换 3. **真值和机器数** 4. **原码、反码、补码**: - 定义 - 表示范围 - 特点 - 比较 5. **移码**: - 定义 - 特点 - 与补码的关系 6. **BCD码**: - 8421码 - 其他BCD码 7. **字符编码**: - ASCII - Unicode 8. **校验码**: - 奇偶校验 - 海明码 - CRC --- *下一节:2.2 定点数的表示和运算*