一、表示
dec: 十进制 decimalism
bin:二进制 binary
oct:八进制 octal
hex:十六进制 hexadecimal
二、C语言中的表示
在C语言里,整数只有三种表示形式:十进制,八进制,十六进制。
以数字0开头,由0~7组成的数是八进制。
以0X或0x开头,由0~9,A~F或a~f (大小写都可以)组成是十六进制。
除表示正负的符号外,以1~9开头,由0~9组成是十进制,且没有前缀
进制准换问题
一、直接用printf函数中的输出控制符来转换进制
例如:输入整数020 (为八进制),该方法输入为:16,20,10
int x=020;
printf("%d,%o,%x\n",x,x,x);
若要显示其前缀则加入说明符:%#o,%#x (o,x不区分大小写)
int x=20;
printf("%d,%#o,%#x\n",x,x,x);
该方法输出为:20,024,0x14
二、利用算法实现进制转化
-
十进制转换为任意进制
#include<>
void main()
{ int x,p; //x为十进制数,p为目标进制大小
scanf("%d",&x);
scanf("%d",&p);
int a[100]; //存放余数
int count=0;
do{
a[count++]=x%p;
x=x/p;
}//当商不为0时进行循环
while(x!=0);
for(int i=count-1;i>=0;i--){
printf("%d",a[i]);
}
}
- 任意进制转换为十进制
#include<>
void main()
{
int num,dec,p,q;//num为输入的进制数,dec为十进制
scanf("%d",&num);
scanf("%d",&p);
q = 1;
dec = 0;
do{
dec = dec+(num%10)*q;
num /= 10;
q = q*p;
}while(num!=0);
printf("%d\n",dec);
}
- 二进制转换为十六进制
#include <>
#include <>
int main(){
//输入2进制数
int x;
scanf("%d",&x);
//确定:16进制数组大小size与2进制数组大小size*4.
int X=x;
int size=0;
while(true){
if(X%10000!=0){ //采取看4位二进制的方法
size++;
X=X/10000;
}else{
break;
}
}
char tt[size]; //16进制数数组
int t[size*4]; //2进制数数组
//存入
int sum=0;
int count=0;
for(int i=0;i<sizeof(t)/sizeof(int);i++){
t[i]=x%10;
x=x/10;
sum=sum+t[i]*pow(2,count);
count++;
if(count%4==0){
if(sum>=10){
tt[--size]=65+(sum-10); //字符'A'的ascii码为65
}else{
tt[--size]='0'+sum;
}
count=0;
sum=0;
}
}
for(int i=0;i<sizeof(tt);i++){
printf("%c",tt[i]);
}
return 0;
}