进制转换

一般在程序中我们定义的都是十进制的数,但有时为了取一个比较大的数,会选择用十六进制表示。有时也会用到八进制的数。

 

1,进制的简称

二进制:b (binary);

八进制: oct (octal);

十进制:dec(decimal);

十六进制:hex(hexadecimal);

 

2,C/C++规定,八进制的数必须以“0”开头,十六进制的数必须以“0x”开头。

比如在定义十六进制时,int a = 0x3a;表示十进制的58。并不区分大小写,int 0x3A;也是正确的。

 

3,进制的输入输出(C++)

在输入或者输出的前面加上进制的简称:

cin>>oct>>i; //输入为八进制数。

cin>>hex>>j;//输入为十六进制数。

cin>>dec>>k;//输入为十进制数。

 

cout<<oct<<i;//输出为八进制数。

cout<<hex<<j;//输出为十六进制数。

cout<<dec<<k;//输出为十进制数。

然而C/C++中并没有二进制的表示,通常需要我们自己进行转换。

有了这些表示和输入输出,可以方便的进行进制的转换。

 

4,进制的输入输出(C)

 

printf是格式化输出函数,它可以直接打印十进制,八进制,十六进制,输出控制符分别为%d, %o, %x, 但是它不存在二进制,如果输出二进制,可以手写,但是也可以调用stdlib.h里面的itoa函数,他不是标准库里面的函数,但是大多数编译器里面都有这个函数,所以就介绍一下

itoa函数的原型为char* itoa(int value, char * string, int radix); int value 被转换的整数,char *string 转换后储存的字符数组int radix 转换进制数,如2,8,10,16 进制等,

下面是测试程序:

复制代码

 1 #include <stdio.h>
 2 #include <stdlib.h> 
 3 
 4 int main()
 5 {
 6     
 7     int a = 12;
 8     printf("八进制 --> %o\n", a);
 9     printf("十六进制 --> %X\n", a);
10     printf("十进制 --> %d\n", a);
11     char s[10];
12     itoa(a, s, 2);
13     printf("二进制 --> %s\n", s);
14     itoa(a, s, 3);
15     printf("三进制 --> %s\n", s);
16     return 0;
17 }

 

 

总结:

    进制转换无非两种情况,其他情况用十进制作为中转。

    1.x进制转10进制

    2.10进制转x,进制

   

    对于1,使用下面的代码

LL to_decimal(char N[], int radix, LL num) {
	int len = strlen(N);
	LL ans = 0;
	/*LL mul = 1;
	for (int i = len - 1; i >= 0; i--) {
		ans += Map[N[i]] * mul;
		mul *= radix;
	}*/
	for (int i = 0; i < len; i++) {
		ans = ans * radix + Map[N[i]];
		if (ans < 0 || ans > num) return -1;
	}
	return ans;
}

    对于2,使用“除基取余法”;或使用itoa函数,若直接显示可以用%o之类进行格式控制。

while(i)
{
    a[j]=i%2;
    i/=2;
    j++;
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值