进制转换详解

了解进制:

进制问题 :2进制 8进制 10进制 16进制

进制之间的转换 编程实现进制之间的转换

整数进制转换

小数进制转换

满多少进1 10进制满10进1 ; 2进制满2进1

10进制转2进制 :短除法

转换过程:用10进制数除以2,取余数,当10进制为0的时候结束

这个10进制对应的2进制数就是逆序的余数

123(10)=111 1011(2)

47(10)=10 1111(2)

77(10)=100 1101(2)

10进制转8进制

转换过程:用10进制数除以8,取余数,当10进制为0的时候结束

这个10进制对应的8进制数就是逆序的余数

123(10)=173(8)

47(10)=57(8)

77(10)=115(8)

10进制转16进制

转换过程:用10进制数除以16,取余数,当10进制为0的时候结束

这个10进制对应的16进制数就是逆序的余数

规定:10~15 ==> A~F

123(10)=7B(16)

47(10)=2F(16)

77(10)=4D(16)

2进制转8进制 转16进制的快捷方法:

规定:1个8进制位等于3个二进制位;

1个16进制位等于4个二进制位;

计算的时候从最右边开始 ,不够位数高位补0

101 011 000 111 100 111(2)

=530747(8)

0010 1011 0001 1110 0111(2)

=2B1E7(16)

011 100 101 011 010 111 101 110(2)

=34532756(8)

0111 0010 1011 0101 1110 1110(2)

=72B5EE(16)

011 011 001 010 110 001 011(2)

=3312613(8)

1101 1001 0101 1000 1011(2)

=D958B(16)

64732521(8)

=110 100 111 011 010 101 010 001(2)

937B6E8F(16)

=1001 0011 0111 1011 0110 1110 1000 1111(2)

64523567(8)

=110 100 101 010 011 101 110 111(2)

FE628DA9(16)

=1111 1110 0110 0010 1000 1101 1010 1001(2)

2进制转10进制

总结:从进制位的最右边开始用对应的位数的数字*2^n次方的和

n从0开始递增

10101(2)=21(10)

8进制转10进制

总结:从进制位的最右边开始用对应的位数的数字*8^n次方的和

n从0开始递增

16进制转10进制

总结:从进制位的最右边开始用对应的位数的数字*16^n次方的和

n从0开始递增

10110(2)=22(10)

4302(8)=2242(10)

A15(16)=2571(10)

练习1:

cpp 复制代码
#include<iostream>
#include<cstdio>
using namespace std;
/*
进制转换
描述
将一个长度最多为19位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过19位的十进制非负整数。
输出
每行输出对应的二进制数。
样例输入
0 
1
3 
8 
样例输出
0 
1 
11	
1000
*/
int n,a[25],xb; 
void f(int n){
	xb=0;
	if(n==0) cout<<0;
	while(n){
		a[++xb]=n%2;
		n/=2;
	}
	for(int i=xb;i>=1;i--) cout<<a[i];
	cout<<endl;
}
int main(){
	while(cin>>n){
		f(n);
	}
	return 0;
}

其他进制转十进制:

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
char a[105]; 
int jz;
//将进制jz的数字转换成10进制 
int change(char a[],int jz){
	int len=strlen(a),s=0;
	//110101
	for(int i=len-1;i>=0;i--){
		if(a[i]>='A' && a[i]<='F'){
			s+=(a[i]-55)*pow(jz,len-i-1);
		}else{
			s+=(a[i]-48)*pow(jz,len-i-1);
		}
	} 
	return s;
}
int main(){
	cin>>a>>jz; //输入的是什么进制 
	cout<<change(a,jz);
	return 0;
}

十进制小数如何转:

cpp 复制代码
小数进制的转换
10转2
转换过程:
	对应的小数部分乘以2 取整数部分,顺序,小数部分为0
0.625(10)=0.101(2)
0.5(10)=0.1(2)
0.25(10)=0.01(2)
0.125(10)=0.001(2)
0.0625(10)=0.0001(2) 

10转8
转换过程:
	对应的小数部分乘以8 取整数部分,顺序,小数部分为0 
	
10转16
转换过程:
	对应的小数部分乘以16 取整数部分,顺序,小数部分为0 
	A~F 代替 10~15 

2转10进制小数
0.1011(2)= (10) 
2转8进制小数
	规定:从小数点右边开始每3位二进制数代表1位8进制数,最后面补0 
2转16进制小数
	规定:从小数点右边开始每4位二进制数代表1位16进制数 ,最后面补0
 

进制转换程序:

cpp 复制代码
#include<iostream>
#include<cstdio>
using namespace std;
//int 2^32-1    2147483647 
//10转2-8-16进制 
/*
用10进制数除以2,取余数,当10进制为0的时候结束
		  这个10进制对应的2进制数就是逆序的余数
*/
//10转2的函数 
//int n,a[35],xb; 
//void change2(int n){
//	while(n){
//		a[++xb]=n%2;
//		n/=2;
//	}
//	for(int i=xb;i>=1;i--) cout<<a[i];
//}
10转8   数组名 b  
//int b[35],bx; 
//void change8(int n){
//	while(n){
//		b[++bx]=n%8;
//		n/=8;
//	}
//	for(int i=bx;i>=1;i--) cout<<b[i];
//} 
//int a[35],xb;
//void change28(int n,int jz){ //低于10进制的数字都可以使用的函数 
//	while(n){
//		a[++xb]=n%jz;
//		n/=jz;
//	}
//	for(int i=xb;i>=1;i--) cout<<a[i];
//}

//10转16的   10~15 A~F  数组名h
char a[35];
int xb;
void change16(int n){
	while(n){
//		'0'=48
//		'A'=65
		if(n%16>9){
			a[++xb]=55+n%16;
		}else{
			a[++xb]=48+n%16;
		}
		n/=16;
	}
	for(int i=xb;i>=1;i--) cout<<a[i];
}
int main(){
	cin>>n;

	return 0;
}
相关推荐
ZSYP-S14 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos17 分钟前
c++------------------函数
开发语言·c++
yuanbenshidiaos21 分钟前
C++----------函数的调用机制
java·c++·算法
唐叔在学习26 分钟前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA1 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
tianmu_sama1 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
chengooooooo1 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc1 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
羚羊角uou1 小时前
【C++】优先级队列以及仿函数
开发语言·c++
姚先生971 小时前
LeetCode 54. 螺旋矩阵 (C++实现)
c++·leetcode·矩阵