1.进制的表示
- 二进制(Binary):基数为2,使用0、1两个数码
前缀表示法:0b 或 0B(现代编程语言) c 0b1011, 0B1100, 0b11111111 后缀表示法:B 或 b text 1011B, 1100b, 11111111B- 八进制(Octal):基数为8,使用0-7八个数码
前缀表示法:0(数字0开头) c 017, 0237, 0777 注意:这是C语言家族的标准,0开头的数字会被解析为八进制 后缀表示法:O 或 Q(避免与数字0混淆) text 17O, 237Q, 777Q 历史原因:早期用O作后缀,但易与数字0混淆,后来有些系统改用Q- 十六进制(Hexadecimal):基数为16,使用0-9、A-F十六个数码
前缀表示法:0x 或 0X(C/C++/Java等语言常用) c 0x18F, 0XAB3, 0xFF 后缀表示法:H 或 h(汇编语言、书面表示常用) assembly 18FH, 0FFh, A3Bh 注意:以字母开头的十六进制数加后缀H时,前面要加0,如0A3BH避免与标识符混淆- 十进制(Decimal)
无前缀后缀(默认) 或以D、d结尾(明确表示时) text 123, 456D, 789d2.R进制整数转10进制
好的,我来详细讲解R进制整数转10进制的方法,这是软考必考的计算题。
2.1.按权展开法
公式:
\[ \text{十进制值} = a_n \times R^n + a_{n-1} \times R^{n-1} + \cdots + a_1 \times R^1 + a_0 \times R^0 \]其中:
- ( R ) = 进制基数(二进制R=2,八进制R=8,十六进制R=16)
- ( a_i ) = 第i位的数字
- ( n ) = 最高位的位置(从0开始计数)
2.2 分步计算法
步骤1:确定每位数字的权重
权重 = ( R^{\text{位置}} )
- 位置编号:从右向左,从0开始
- 最右边是第0位,权重是 ( R^0 = 1 )
- 向左依次:第1位权重 ( R^1 ),第2位权重 ( R^2 )…
步骤2:数字×权重
将每位数字乘以对应的权重
步骤3:求和
把所有乘积相加,得到十进制结果
示例1:二进制转十进制
题目:(1101)₂ = (?)₁₀
计算过程:
位数: 1 1 0 1 位置: 3 2 1 0 ← 从右向左编号 权重: 2³ 2² 2¹ 2⁰ ← 计算权重 =8 =4 =2 =1 计算:1×8 + 1×4 + 0×2 + 1×1 = 8 + 4 + 0 + 1 = 13答案:(1101)₂ = 13
示例2:八进制转十进制
题目:(237)₈ = (?)₁₀
计算过程:
位数: 2 3 7 位置: 2 1 0 权重: 8² 8¹ 8⁰ =64 =8 =1 计算:2×64 + 3×8 + 7×1 = 128 + 24 + 7 = 159答案:(237)₈ = 159
示例3:十六进制转十进制
题目:(1A3)₁₆ = (?)₁₀
注意:A=10, B=11, C=12, D=13, E=14, F=15
计算过程:
位数: 1 A 3 值: 1 10 3 ← 字母转数值 位置: 2 1 0 权重:16² 16¹ 16⁰ =256 =16 =1 计算:1×256 + 10×16 + 3×1 = 256 + 160 + 3 = 419答案:(1A3)₁₆ = 419
3. 10进制整数转R进制
3.1 除基取余法
口诀:除R取余,逆序排列
具体步骤:
- 除以R:用十进制数除以基数R
- 记录余数:记录每次除法的余数
- 商作为新的被除数:用商继续除以R
- 重复直到商为0
- 逆序排列:将余数从最后到最前排列
分步计算示例
示例1:十进制转二进制(R=2)
题目:29₁₀ = (?)₂
计算过程:
步骤 除法 商 余数 1 29 ÷ 2 = 14 ... 1 ↑ 2 14 ÷ 2 = 7 ... 0 ↑ 逆序排列 3 7 ÷ 2 = 3 ... 1 ↑ 4 3 ÷ 2 = 1 ... 1 ↑ 5 1 ÷ 2 = 0 ... 1 ↑余数逆序排列:11101
答案:29₁₀ = 11101₂
示例2:十进制转八进制(R=8)
题目:125₁₀ = (?)₈
计算过程:
步骤 除法 商 余数 1 125 ÷ 8 = 15 ... 5 ↑ 2 15 ÷ 8 = 1 ... 7 ↑ 逆序排列 3 1 ÷ 8 = 0 ... 1 ↑余数逆序排列:175
答案:125₁₀ = 175₈
示例3:十进制转十六进制(R=16)
题目:300₁₀ = (?)₁₆
注意:余数10-15要转为A-F
计算过程:
步骤 除法 商 余数 十六进制 1 300 ÷ 16 = 18 ... 12 C ↑ 2 18 ÷ 16 = 1 ... 2 2 ↑ 逆序排列 3 1 ÷ 16 = 0 ... 1 1 ↑余数逆序排列:12©, 2, 1 → 12C₁₆
答案:300₁₀ = 12C₁₆
4.m进制转n进制
先将m进制转化为十进制数,再将十进制数转化为n进制数,中间需要通过十进制中转
但下面两种进制间可以直接转化
分组替换法
4.1.二进制 → 八进制(3位分组)
原理:1位八进制 = 3位二进制(因为8=2³)
步骤:
- 分组:从小数点开始,向左和向右每3位一组
- 补零:最左或最右一组不足3位时补0
- 转换:每组3位二进制直接转换为1位八进制
示例:二进制1101011.1011转八进制
分组:从小数点开始 整数部分: 1 101 011 ↓ ↓ ↓ 补零: 001 101 011 ↓ ↓ ↓ 八进制: 1 5 3 小数部分: 101 1 ↓ ↓ 补零: 101 100 ↓ ↓ 八进制: 5 4 结果:153.54₈4.2.二进制 → 十六进制(4位分组)
原理:1位十六进制 = 4位二进制(因为16=2⁴)
步骤:
- 分组:从小数点开始,向左和向右每4位一组
- 补零:最左或最右一组不足4位时补0
- 转换:每组4位二进制直接转换为1位十六进制
示例:二进制1101011.1011转十六进制
分组:从小数点开始 整数部分: 110 1011 ↓ ↓ 补零: 0110 1011 ↓ ↓ 十六进制: 6 B 小数部分: 1011 ↓ 补零: 1011 ↓ 十六进制: B 结果:6B.B₁₆4.3 快速转换表(必须熟记)
4.3.1.二进制-八进制对照表
| 二进制 | 八进制 |
|---|---|
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
4.3.2.二进制-十六进制对照表
| 二进制 | 十六进制 | 二进制 | 十六进制 |
|---|---|---|---|
| 0000 | 0 | 1000 | 8 |
| 0001 | 1 | 1001 | 9 |
| 0010 | 2 | 1010 | A |
| 0011 | 3 | 1011 | B |
| 0100 | 4 | 1100 | C |
| 0101 | 5 | 1101 | D |
| 0110 | 6 | 1110 | E |
| 0111 | 7 | 1111 | F |
4.4 特殊技巧
技巧1:利用8421码
对于十六进制转换,可以快速心算:
1101 = 8+4+0+1 = 13 = D 1010 = 8+0+2+0 = 10 = A技巧2:验证技巧
转换后可以简单验证:
- 八进制每位最大是7(对应二进制111)
- 十六进制每位最大是F(对应二进制1111)
4.5 逆转换:八/十六进制转二进制
4.5.1.八进制 → 二进制
每位八进制扩展为3位二进制
八进制:3 7 5 . 2 4 二进制:011 111 101 . 010 100 简化:11111101.0101₂4.5.2.十六进制 → 二进制
每位十六进制扩展为4位二进制
十六进制:A 9 . F C 二进制:1010 1001 . 1111 1100 简化:10101001.111111₂