常见进制转换
一. 进制概述
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制——X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
1.二进制
二进制有两个特点:它由两个数码0,1组成,二进制数运算规律是逢二进一,借位规则是“借一当二”。
例如:1+1=10B,10-1=1B
2. 八进制
八进制的基数R=8=2^3,有数码0、1、2、3、4、5、6、7,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。八进制用下标8或数据后面加O表示 例如:二进制数据 ( 11 101 010 . 010 110 100 )2 对应八进制数据 (352.264)8或352.264O。
3.十进制
十进制的基数为10,数码由0-9组成,计数规律逢十进一。
4.十六进制
十六进制数有两个基本特点:它由十六个数码:数字0~9加上字母A-F组成(它们分别表示十进制数10~15),十六进制数运算规律是逢十六进一,即基数R=16=2^4,通常在表示时用尾部标志H或下标16以示区别。
例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。
二. 进制转换
1.十进制整数转二进制整数
十进制整数转换成二进制的方法之一——取余法
因为余数要逆序排列,所以45D = 10 1101B
代码如下:
#include<bits/stdc++.h>
using namespace std;
char B[20]; // 保存二进制
int main() {
int D; // 十进制
cin >> D;
for(int i = 0; ; i++) {
B[i] = D%2+'0'; // 取D的余数加上'0',将余数转换成ASCLL码
D /= 2; // D整数2
if(D==0)
break;
}
for(int i = strlen(B)-1; i >= 0; i--) // 因为所得到的余数要逆着写
cout << B[i]; //所以B[i]逆着输出
cout << endl;
return 0;
}
2.二进制整数转换十进制整数
把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
2的0次方是1(任何数的0次方都是1,0的0次方无意义)
2的1次方是2
2的2次方是4
2的3次方是8
2的4次方是16
2的5次方是32
2的6次方是64
2的7次方是128
等等
例如:
100011B=32+0+0+0+2+1=35D
代码如下:
#include<bits/stdc++.h>
using namespace std;
char B[20]; // 保存二进制
int main(){
cin >> B; // 输入二进制数列
int len = st