进制转换

发布时间 2023-10-13 10:31:25作者: lwj_2023_lwj

进制转换

思想
  1. R(二、八、十六)进制转十进制:(用乘法,再相加)如:二进制(1101)b转十进制-->

    1*1+0*2+1*2*2+1*2*2*2
  2. 十进制转R(二、八、十六)进制:(用除法,再拼接)除法取余,倒序拼接

R(二、八、十六)进制转十进制

二进制转十进制

main(){
int x;  //待转换的二进制数
int sum=0;  //将转换为的十进制数
int n=0;
scanf("%d",&x);
while(x>0){
sum+=x%10*pow(2,n);//pow()函数计算2的n次幂
x=x/10;      //整除10
n++;
}
printf("sum=%d",sum);
}

八进制转十进制

main(){
int x;  //待转化的二进制数
int sum=0;  //将转换为的十进制数
int n=0;
scanf("%d",&x);
while(x>0){
sum+=x%10*pow(8,n);//pow()函数计算8的n次幂
x=x/10;      //整除10
n++;
}
printf("sum=%d",sum);
}

二、八进制转十进制

 main(){
int z;
printf("请选择二进制或八进制转换成十进制:");
   scanf("%d",&z) ;   //z为要选择的进制数
int x;
int sum=0;
int n=0;
scanf("%d",&x);
while(x){
sum=x%10*pow(z,n);
x=x/10;
   n++;
  }
printf("sum=%d",sum);
}

十六进制转成十进制

 main(){
   char x[10];   //数组x用于存放十六进制字符串
   int i = 0, len = 0, temp = 0;
   int sum = 0;
   gets(x);//输入函数(专门对数组进行输入+可以有空格)
   len = strlen(x);    //判断数组长度
   for (i = 0; x[i] != '\0'; ++i){//'\0'==null   循环判断条件也可以是 i<len
       switch(x[i]){
           case 'A': temp = 10; break;
           case 'B': temp = 11; break;
           case 'C': temp = 12; break;
           case 'D': temp = 13; break;
           case 'E': temp = 14; break;
           case 'F': temp = 15; break;
           default: temp = x[i]-'0'; break;//'0'=48 将数字字符转化为数字
      }
       sum += (temp*pow(16,len-1-i));
  }
   printf("%d",sum);
   return 0;
}

十进制转R(二、八、十六)进制

十进制转二进制

main(){
int arr[20];   //数组arr用于存放二进制数字符串
int x;        //待转换的十进制数
scanf("%d",&x);
int temp=0;
   int i=0;
for(i=0;x!=0;i++){
       temp=x%2;   //注意:一定要先取模在取余
x=x/2;
arr[i]=temp;
  }
//   printf("%d\n",i);
   i--;
   for(i;i>=0;i--){  //倒序输出
printf("%d",arr[i]);
}
}

十进制转八进制

main(){
int arr[20];
int x;
scanf("%d",&x);
int temp=0;
   int i=0;
for(i=0;x!=0;i++){
       temp=x%8;
x=x/8;
arr[i]=temp;
  }
//   printf("%d\n",i);
   i--;
   for(i;i>=0;i--){
printf("%d",arr[i]);
}
}

十进制转二、八进制

main(){
int arr[20];
int x;
   int z;
   printf("请输入待转换的十进制数:")
   scanf("%d",&x);
   printf("%请选择要转换为几进制:");
   scanf("%d",&z);
int temp=0;
   int i=0;
for(i=0;x!=0;i++){
       temp=x%z;
x=x/z;
arr[i]=temp;
  }
//   printf("%d\n",i);
   i--;
   for(i;i>=0;i--){
printf("%d",arr[i]);
}
}

十进制转十六进制

main(){
char arr[10];  //存放十六进制结果的数组
   int temp;      
int x;         //待转换的十进制数
scanf("%d",&x);
   int i=0;
  for(i=0;x!=0;i++){
       temp=x%16;
       switch(temp){    //判断余数
case 10:
arr[i]='A';break;
case 11:
arr[i]='B';break;
case 12:
arr[i]='C';break;
case 13:
arr[i]='D';break;
case 14:
arr[i]='E';break;
case 15:
arr[i]='F';break;
       default:
  arr[i]=temp+'0';   //将数字转化为字符
           break;
}
x=x/16;
  }
//   printf("%d\n",i);
   i--;
   for(i;i>=0;i--){
printf("%c ",arr[i]);
}
}