进制转换详解

了解进制:

进制问题 :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;
}
相关推荐
浮生如梦_42 分钟前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
励志成为嵌入式工程师3 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
wheeldown4 小时前
【数据结构】选择排序
数据结构·算法·排序算法
青花瓷5 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
观音山保我别报错5 小时前
C语言扫雷小游戏
c语言·开发语言·算法
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
TangKenny6 小时前
计算网络信号
java·算法·华为