进制转换:
进制转换更多的是一种数学问题。
十进制转二进制:
除以2取余,余数倒叙排列就是该正整数的二进制数。
十进制转八进制:
除以8取余,余数倒叙排列就是该正整数的八进制数。
十进制转十六进制:
除以16取余,10~ 16用A~F表示,余数倒叙排列就是该正整数的十六进制数。
二进制转十进制:
从最后一位往,每位二进制数字乘以2的位次方。例:
1010=0* 2^0 + 1*2^1+0 * 2 ^ 2+1 * 2 ^ 3
八进制转十进制:
从最后一位往,每位二进制数字乘以8的位次方。
十六进制转十进制:
从最后一位往,每位二进制数字乘以16的位次方。
C代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
char* tentosixteen(int n);
int tentoeight(int n);
int tentotwo(int n);
long long sixteentoten(char n[]);
int eighttoten(int n);
int twototen(int n);
long long sixteentoeight(char n[]);
long long sixteentotwo(char n[]);
int main(){
int a=-3;
printf("%#X\n",a);
int i=27;
char *sum1=tentosixteen(i);
printf("%d(10)转换为16进制数组为:%s\n",i,sum1);
int sum2=tentoeight(i);
printf("%d(10)转换为8进制数组为:%d\n",i,sum2);
int sum3=tentotwo(i);
printf("%d(10)转换为2进制数组为:%d\n",i,sum3);
int sum5=eighttoten(i);
printf("%d(8)转换为10进制数组为:%d\n",i,sum5);
int sum6=twototen(i);
printf("%d(2)转换为10进制数组为:%d\n",i,sum6);
char s[]="D";
int sum4=sixteentoten(s);
printf("%s(16)转换为10进制数组为:%lld\n",s,sum4);
long long sum7=sixteentoeight(s);
printf("%s(16)转换为8进制数组为:%lld\n",s,sum7);
long long sum8=sixteentotwo(s);
printf("%s(16)转换为2进制数组为:%lld\n",s,sum8);
return 0;
}
char* tentosixteen(int n){
int b=n;
char *sum;
int index=0;
if(b==0){
sum[0]='0';
index++;
}
while(b!=0){
int a=b%16;
if(a<10){
sum[index]='0'+a;
}else{
sum[index]='A'+a-10;
}
b/=16;
index++;
}
for(int i=index-1;i>=index/2;i--){
char c=sum[i];
sum[i]=sum[index-1-i];
sum[index-1-i]=c;
}
printf("\n");
return sum;
}
int tentoeight(int n){
int b=n,p=1;
int sum=0;
if(b==0){
sum=0;
}
while(b!=0){
int a=b%8;
b/=8;
sum+=a*p;
p*=10;
}
return sum;
}
int tentotwo(int n){
int b=n,p=1;
int sum=0;
if(b==0){
sum=0;
}
while(b!=0){
int a=b%2;
b/=2;
sum+=a*p;
p*=10;
}
return sum;
}
long long sixteentoten(char n[]){
long long sum=0;
int l=strlen(n);
for(int i=0;i<l;i++){
if(n[i]>='0' && n[i]<='9')
sum+=(n[i]-'0')*pow(16*1.0,l-1-i);
else
sum+=(n[i]-'A'+10)*pow(16*1.0,l-1-i);
//pow函数 double pow(doble x,double y)//返回x的y次幂,即x^y
}
return sum;
}
int eighttoten(int n){
int b=n,p=1;
int sum=0;
if(b==0){
sum=0;
}
while(b!=0){
int a=b%10;
b/=10;
sum+=a*p;
p*=8;
}
return sum;
}
int twototen(int n){
int b=n,p=1;
int sum=0;
if(b==0){
sum=0;
}
while(b!=0){
int a=b%10;
b/=10;
sum+=a*p;
p*=2;
}
return sum;
}
long long sixteentoeight(char n[]){
int temp=sixteentoten(n);
temp=tentoeight(temp);
return temp;
}
long long sixteentotwo(char n[]){
int temp=sixteentoten(n);
temp=tentotwo(temp);
return temp;
}
笔者的代码质量并不是很好仅供大家参考