初级程序员考试

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
初级程序员考试 [2026/06/16 22:40] 张叶安初级程序员考试 [2026/06/17 00:02] (当前版本) 张叶安
行 1: 行 1:
 +202606162300
 +
 +120节,一天4节,30天看完。
 +
 ====== 进制 ====== ====== 进制 ======
  
行 19: 行 23:
 2) 十进制转其他进制 2) 十进制转其他进制
  
-| |整数部分:连除取余法| +|位置|整数部分:连除取余法| 小数部分:连乘取整法| 
-| |$N = (d_{m-1} \cdots d_1 d_0)_R$| +|表示|$N = (d_{m-1} \cdots d_1 d_0)_R$| $F = (0.d_{-1} d_{-2} \cdots d_{-n})_R$
-| |其中从 最低位 $(d_0)$ 到 最高位 $(d_{m-1})$ 每一位由 连续除以 R 的余数 决定+|d值|其中每一位由连续除以R的余数决定| 其中每一位由连续乘以R的整数部分决定
-| |$N_0 = N$ \\ $N_{i+1} = \lfloor N_i / R \rfloor \quad (i = 0,1,2,\cdots) $ \\ $d_i = N_i \bmod R \quad \text{(余数,取值范围 } 0 \sim R-1\text{)}$| +|公式|$N_0 = N$ \\ $N_{i+1} = \lfloor N_i / R \rfloor \quad (i = 0,1,2,\cdots) $ \\ $d_i = N_i \bmod R \quad \text{(余数,取值范围 } 0 \sim R-1\text{)}$| $F_0 = F \quad \text{(纯小数部分)} $ \\ $F_{i+1} = \text{frac}(F_i \times R) \quad \text{(取小数部分继续)} $ \\ $d_{-i} = \lfloor F_i \times R \rfloor \quad \text{(乘积的整数部分,作为下一位)}$ | 
-|停止条件|当 $N_{i+1} = 0 $时停止,最后得到的余数 $d_{m-1}$ 作为最高位。| +|停止条件|当 $N_{i+1} = 0 $时停止,最后得到的余数 $d_{m-1}$ 作为最高位。|精确转换:当 F_{i+1} = 0 时停止(小数部分乘尽) \\ 近似转换:达到所需精度位数时停止(如保留 n 位小数)
-| 示例: |十进制 19 转二进制 (R=2)\\19 ÷ 2 = 9 余 1 (d_0)\\9 ÷ 2 = 4 余 1 (d_1)\\4 ÷ 2 = 2 余 0 (d_2)\\2 ÷ 2 = 1 余 0 (d_3)\\1 ÷ 2 = 0 余 1 (d_4) 停止\\结果: $(10011)_2$ |+| 示例 |十进制 19 转二进制 (R=2) \\ 19 ÷ 2 = 9 余 1 $(d_0)\\ 9 ÷ 2 = 4 余 1 $(d_1)\\ 4 ÷ 2 = 2 余 0 $(d_2)\\ 2 ÷ 2 = 1 余 0 $(d_3)\\ 1 ÷ 2 = 0 余 1 $(d_4)停止 \\ 结果: $(10011)_2$ | 十进制 0.625 转二进制 (R=2) \\ 0.625 × 2 = 1.25 → 整数部分 1 $(d_{-1})$,剩余 0.25 \\ 0.25 × 2 = 0.5 → 整数部分 0 $(d_{-2})$,剩余 0.5 \\ 0.5 × 2 = 1.0 → 整数部分 1 $(d_{-3})$,剩余 0.0 停止 \\ 结果: $(0.101)_2$ |
  
-小数部分:连乘取整法+若数含整数部分 N 和小数部分 F,则
  
-$F = (0.d_{-1d_{-2} \cdots d_{-n})_R$+$(N.F)_{10= (N)_{10} \text{R \quad + \quad (0.F)_{10} \text{转} R$
  
-其中每一位由 连续乘以 R 的整数部分 决定:+部分分别转换,最后用小数点拼接。
  
 +示例: 19.625 转二进制 = $(10011)_2 + (0.101)_2 = (10011.101)_2 $
  
-$F_0 = F \quad \text{(纯小数部分)} $+特殊情况:无限循环
  
-$F_{i+1} = \text{frac}(F_i \times R) \quad \text{(取小数部分继续)} $+有些十进制小数无法精确转换成二进制(如 0.1),会形成循环:
  
-$d_{-i} = \lfloor F_i \times R \rfloor \quad \text{(乘积的整数部分,作为下一位)}$+$0.1_{10} = (0.000110011001100\cdots)_2 = (0.0\overline{0011})_2$
  
-停止条件:+此时按精度要求截断即可。
  
- -精确转换:当 F_{i+1} 0 时停止(小数部分乘尽) +====== 二、八、十六进制之间的转换 ======
- -近似转换:达到所需精度位数时停止(如保留 n 位小数)+
  
-示例: 十进制 0.625 转二进制 (R=2)+^ 转换方向 ^ 方法 ^ 示例 
 +| 二进制 → 八进制 | 整数部分**从右往左**,小数部分**从左往右**,每 **3 位**一组,不足补 0, \\ 每组换 1 位八进制 | (10 111 101.010 1)₂ = (275.24)₈ | 
 +| 八进制 → 二进制 | 每位八进制数展开成 **3 位**二进制(高位补 0) | (275.24)₈ = (010 111 101.010 100)₂ | 
 +| 二进制 → 进制 | 整数部分**从右往左**,小数部分**从左往右**,每 **4 位**一组,不足补 0, \\ 每组换 1 位十六进制 | (1011 1101.0101)₂ = (BD.5)₁₆ | 
 +| 十六进制 → 二进制 | 每位十六进制数展开成 **4 位**二进制(高位补 0) | (BD.5)₁₆ (1011 1101.0101)₂ | 
 +| 八进制 ↔ 十六进制 | **以二进制为桥梁**:八进制→二进制→十六进制(反之亦然) | (275)₈ → (010111101)₂ → (0BD)₁₆ = (BD)₁₆ |
  
-0.625 × 2 1.25 → 整部分 1 (d_{-1})剩余 0.25+====== 含符号值的表示 ====== 
 +^ 码制 ^ 转换规则 ^ -25 ^ +25 ^ 特点 ^ 主要用途 ^ 
 +| 原码 | 符号位(最左一位):0正1负 \\ 数值位:真值的绝对值 | 10011001 | 00011001 | 0有+0和-0两种表示 | **人类直观理解**,\\ 用于输入输出显示,不参与运算 | 
 +| 反码 | 正数:同原码 \\ 负数:符号位不变,数值位按位取反 | 11100110 | 00011001 | 0有两种表示,加减需循环进位 | **中间过渡桥梁** \\ 补码的中间步骤,现代计算机不用 | 
 +| 补码 | 正数:同原码 \\ 负数:反码末位+1(符号位不变) | 11100111 | 00011001 | **计算机实际使用**\\ 0唯一,减法统一为加法 | **整数运算核心** \\ CPU中的整数都用补码表示和计算 | 
 +| 移码 | **补码符号位取反** \\ (数值位不变) | 01100111 | 10011001 | 便于浮点数阶码比较,0唯一 | **浮点数阶码** \\ 便于比较指数大小(IEEE 754标准使用) |
  
-0.25 × 2 0.5 → 整数部分 0 (d_{-2})剩余 0.5+以 8位补码 计算 10 - 25 = -15 为例走一遍完整的二进制演算过程:
  
-0.5 × 2 = 1.0 → 整数部分 1 (d_{-3}),剩余 0.0 停止+1步:找 +10 的补码
  
-结果: (0.101)_2 ++10 是正数,补码 = 原码 = 00001010
  
-整数 + 小数 合并处理+第2步:找 -25 的补码(核心)
  
-若数含整数部分 N 和小数部分 F,则+· +25 的原码00011001
  
-$(N.F)_{10} = (N)_{10} \text{转} R \quad + \quad (0.F)_{10} \text{转} R$+· 取反得反码:11100110
  
 +· 末位 +1 得补码:11100111(这就是 -25 的补码表示)
  
-两部分分别转换,最后用小数点拼接。+第3步:执行加法(CPU 实际做的事)
  
-示例: 19.625 转二进制 = (10011)_2 (0.101)_2 = (10011.101)_2 +<code> 
 +  00001010   (+10) 
 ++ 11100111   (-25 的补码) 
 +──────────── 
 +  11110001   (结果补码) 
 +</code>
  
-特殊情况无限循环+第4步将结果补码转回十进制(验证)
  
-有些十进制小数无法精确转换成二进制(如 0.1),会形成循环:+· 结果 11110001,符号位为 1(负数
  
-$0.1_{10} = (0.000110011001100\cdots)_2 = (0.0\overline{0011})_2$+· 末位 -1 得反码:11110000
  
 +· 取反得原码:10001111(符号位1不变,数值位 0001111 = 15)
  
-此时按精度要求截断即可。+· 所以结果是 -15 ✅
  
-====== 二、八、十六进之间转换 ======+额外观察:溢出处理 
 + 
 +这次计算中,最高位(第8位)没有产生进位,所以结果是正确的。 
 + 
 +如果计算 125 + 125 250(超出127范围): 
 + 
 +<code> 
 +  01111101  (+125) 
 ++ 01111101  (+125) 
 +──────────── 
 +  11111010  (结果为 -6 ❌ 溢出错误) 
 +</code> 
 + 
 +符号位从 0 变成 1,产生了溢出,CPU 的溢出标志位(OF) 会置1提醒。 
 + 
 +====== ±0的表示 ====== 
 + 
 +^ 码制 ^ +0 表示 ^ -0 的表示 ^ 是否唯一 ^ 
 +| 原码 | 00000000 | 10000000 | 不唯一 ❌ | 
 +| 反码 | 00000000 | 11111111 | 不唯一 ❌ | 
 +| 补码 | 00000000 | 00000000 | 唯一 ✅ | 
 +| 移码 | 10000000 | 10000000 | 唯一 ✅ | 
 + 
 +====== 表示范围 ====== 
 + 
 +^ 码制 ^ 表示范围(8位) ^ 表示范围(n位) ^ 特殊说明 ^ 
 +| 原码 | $-(2^7 - 1) ~ +(2^7 - 1) $ \\ **-127 ~ +127**  | $-(2^{n-1} - 1) ~ +(2^{n-1} - 1) $ | +0 和 -0 占两个编码,对称分布 | 
 +| 反码 | $-(2^7 - 1) ~ +(2^7 - 1) $ \\ **-127 ~ +127** | $-(2^{n-1} - 1) ~ +(2^{n-1} - 1) $ | +0 和 -0 占两个编码,对称分布 | 
 +| 补码 | $-2^7 ~ +(2^7 - 1) $ \\ **-128 ~ +127** | $-2^{n-1} ~ +(2^{n-1} - 1) $ | **多表示一个最小负数**(如 -128),0唯一 | 
 +| 移码 | $-2^7 ~ +(2^7 - 1) $ \\ **-128 ~ +127** | $ -2^{n-1} ~ +(2^{n-1} - 1) $ | 0唯一,便于浮点数阶码比较 | 
 + 
 +因为 补码和移码0唯一,没有100000000这个数,所以人为规定-128为100000000。
  
  
  

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • 初级程序员考试.1781620859.txt.gz
  • 最后更改: 2026/06/16 22:40
  • 张叶安