C语言中的进制

时间:2024-11-12 10:39:01

一、表示

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;
} 

 

相关文章