"%d"十进制
"%x"十六进制
"%o"八进制
c语言里面没有直接打出二进制数的格式符。
因为前三者有直接打出的格式符,因此可通过格式控制符直接打印转换。
二进制则需要整除法或逆整除法转换。
u格式符,用来输出unsigned型数据,即无符号数,以十进制形式输出。
十进制转化为十六进制
#include<stdio.h>
int main(){
int n;
while(~scanf("%d",&n)){
printf("%x\n",n);
}
return 0;
}
十进制转化为二进制
#include<stdio.h>
int main(){
int n,i,r,k=0;
int a[20]={0};//存二进制
while(~scanf("%d",&n)){
i=0;
while(n!=0){
r=n%2;
k=n/2;
a[i]=r;
n=k;
i++;
}
for(int j=i;j>=0;j--){
printf("%d",a[j]);
if(j%4==0)
printf(" ");
}
printf("\n");
}
return 0;
}
整型数组与整数加减数值是整数本身;
字符数组与整数加减数值是字符的ASCII码。
n进制转为十进制
n进制转为十进制
#include<stdio.h>
#include<string.h>
int main(){
int n;
char a[10];
while(~scanf("%d",&n)){//输入n进制
//输入要转化的数
scanf("%s",a);
strupr(a);//将a中的小写字母转化为大写字母
int len=strlen(a);
int su,sum=0;
for(int i=0;i<len;i++){
int k=a[i]-'0';//当a[i]小于9时,将a[i]中的字符转化为对应的数字0~9
int p=a[i]-'A'+10;//当a[i]大于9时,将a[i]中的字符转化为对应的数字10~15
if(k>=n&&a[i]<'A'||p>=n)// &&优先级大于|| 当a[i]既不满足k又不满足p 或p>=n时,不满足
sum=-1;
if(a[i]>='0'&&a[i]<='9')//当a[i]小于9
su=k;
else if(n>=11&&(a[i]>='A'&&p<=n))//当a[i]大于9时,且n>=11
su=p;
sum=sum*n+su;//(((x+1)x+2)x+3)+4
}
if(sum>=0)
printf("%d\n",sum);
else
printf("data error!\n");
}
return 0;
}