进制转换

不同的进制

在计算机中,除二进制外,比较常用的还有八进制和十六进制。

进制基数进位原则基本符号
二进制(B) 2 逢2进1 0,1
八进制(O) 8 逢8进1 0~7
十进制(D) 10 逢10进1 0~9
十六进制(H) 16 逢16进1 0 ~ 9,A ~ F
 

Warning!

易错点:十六进制中的 A 相当于十进制中的 10

进制转换

1. 十进制转化成K进制

(1)整数部分

短除法,除K取余,直到商是0,余数从下到上输出,即为K进制的整数部分。

例:十进制199转化成八进制

(2)小数部分

K取整,直到小数部分是0或达到指定精度,整数部分从上到下输出,即为K进制的小数部分。

例:十进制0.3125转化成八进制

 

Warning!

绝大部分浮点数无法用二进制精确表示,如 0.10。

2. K进制转化成十进制

每一位上的数字乘以对应的位权,整数部分位权是K(数位−1),小数部分的权分别为K−1K−2 

 千位百位十位个位.十分位百分位
数字 2
0
3
2
. 1
2
位权 K3
K2
K1
K0
. K−1
K−2

例:八进制2032.12转换成十进制

(2032.12)8=2×83+0×82+3×81+2×80+1×8−1+2×8−2=(1050.15625)10

 

负数次幂

8−1=1/8=0.125
8−2=1/(82)=0.015625

3. 二、八、十六进制之间的转换

一个八进制位可以用 3 个二进制位来表示(23=8),一个十六进制位可以用 4 个二进制位来表示(24=16),反之同理。

十进制二进制八进制十六进制十进制二进制八进制十六进制
0 0 0 0 8 1000 10 8
1 1 1 1 9 1001 11 9
2 10 2 2 10 1010 12 A
3 11 3 3 11 1011 13 B
4 100 4 4 12 1100 14 C
5 101 5 5 13 1101 15 D
6 110 6 6 14 1110 16 E
7 111 7 7 15 1111 17 F

例:(111100101110)2=(7456)8=(F2E)16

🌰 程序实现将n进制数转换成m进制。

cpp
//将n进制数字num,转换成m进制数
//(其中2 <= n,m <= 16,n进制数对应的十进制的值不超过int范围)
#include <iostream>
#include <string>
using namespace std;
int main() {
	int n, m;
	string num;
	cin >> n >> num >> m;
	//n进制num转换成十进制数ans
	int ans = 0, w = 1;
	int len = num.length();
	for (int i = len - 1; i >= 0; i--){
		if ('A' <= num[i] && num[i] <= 'F'){
			ans = ans + (num[i] - 'A' + 10) * w; 
		} else {
			ans = ans + (num[i] - '0') * w;
		}
		w *= n;
	}
	//十进制数ans转换成m进制
	char mnum[100] = {}, cnt = 0;
	while (ans != 0){
		int tmp = ans % m;
		if (tmp >= 10){
			mnum[cnt++] = tmp - 10 + 'A';
		}else{
			mnum[cnt++] = tmp + '0';
		}
		ans /= m;
	} 
	for (int i = cnt - 1; i >= 0; i--){
		cout << mnum[i];
	}
	return 0;
}
posted @ 2023-11-27 12:46  陆留生信奥艺术  阅读(192)  评论(0)    收藏  举报