C语言进制转换

我想知道学习C语言,
在进制转换的部分,要掌握那些?
本人自学C,才刚刚开始,有困难找大家帮忙。
给我讲讲吧 呵呵 谢谢!
举例说明,越详细越好,谢谢

计算机中常用的数的进制主要有:二进制、八进制、十进制、十六进制。  

2进制,用两个阿拉伯数字:0、1;   

8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;  

10进制,用十个阿拉伯数字:0到9;   

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 

下面用余数短除法把十进制数转化为二进制数为例进行说明

1、明确问题。举个例子,我们现在是要将一个十进制数字156转换成二进制数字。先将这个十进制数作为被除数写在一个倒着的“长除法”的符号里。把目标数系的基数(在这里二进制是“2”)作为除数写在这个除法符号的外面。用这个方法将计算过程可视化会更方便理解,因为整个计算过程只需将数字一直除以2。

2、进行除法运算。把结果的整数部分(商数)写在长除法符号的下面,然后把它的余数(0 或 1)写在被除数的右边。

我们现在是以2为除数,因此得出的商为偶数,则余数为0;如果得出商为奇数,则余数记为1。

3、一直往下继续除,直到商为0为止。把每一个新的商数除以二,然后把余数写在被除数的右边。直到商数为0为止。

4、写出新的二进制数字。从最下面的余数开始,按顺序读到最上面。本例中,你会得到10011100。这就是十进制数字156的二进制形式。或者,我们可以以脚注等式的形式表达,即:15610 = 100111002

活用这个方法可以将所有十进制数字转换成任何进制表达。除数为2是因为我们最终想得到的以2为基数的数(即二进制数值) 。如果最终想得到其他数系的数字,用目标数系的基数代替这个方法里二进制的基数2 就可以了。例如,要得到基数为9的数,就用9来代替2作为除数 。最终的结果就是目标数系的数字表达。

扩展资料:

十进制--->二进制

对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。

对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”

十进制--->八进制

10进制数转换成8进制的方法,和转换为2进制的方法类似,唯一变化:除数由2变成8。

参考资料:百度百科——进制转换

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-16

1、十进制转二进制

方法:十进制的数除以2,然后取余数,直到最后的商为0为止,然后余数从下到上取(这个就是二进制的数)

2、二进制转十进制

方法:把二进制数按权展开、相加就是十进制数。

3、十进制转八进制(类似十进制转二进制的方法)

方法:十进制的数一直除以8,直到商为0,然后倒着取余八进制的数。

4、八进制转十进制(类似二进制转十进制的方法)

方法:把八进制的数按权展开,相加就是十进制数。

5、二进制转八进制

方法1:二进制 -> 十进制 -> 八进制

方法2:2的3次方是8,所以,二进制可以从个位开始,切成3个3个为一组,最高位不够3个就补0然后每一组数就代表八进制的一个位数。

6、八进制转二进制

方法1:八进制 -> 十进制 -> 二进制

方法2:八进制每一位数进行除2取余,如果取出来的余数不够3个就在最高位补0。

要掌握整型的表现形式,如下:

十进制: 都是以0-9这九个数字组成,不能以0开头。

二进制: 由0和1两个数字组成。

八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。

十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都是以ox开始。

参考资料来源:进制转换-百度百科

本回答被网友采纳
第2个回答  2018-12-03

计算机中常用的数的进制主要有:二进制、八进制、十进制、十六进制。  

2进制,用两个阿拉伯数字:0、1;   

8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;  

10进制,用十个阿拉伯数字:0到9;   

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 

以下简介各种进制之间的转换方法:  二进制转换十进制  

例:二进制 “1101100”  

1101100 ←二进制数 

6543210 ←排位方法   

例如二进制换算十进制的算法:   1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20  ↑↑   说明:2代表进制,后面的数是次方(从右往左数,以0开始)  =64+32+0+8+4+0+0  =108 

扩展资料

十进制小数转换为二进制小数   

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。   

然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

本回答被网友采纳
第3个回答  2008-02-21
很简单的,
以下是各种进制的转换方法:
两个进制(其中之一为10进制)之间的互转(手工计算方法)
以2,10进制互转为例,其他请举一反三:
二进制数1101转十进制:
1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13
附加一个八进制转十进制的例子吧:
507(八进制转10进制):
5×8的2次幂+0×8的1次幂+7×8的0次幂=
5×64+0×8+7×1=327(10进制)

以上是小进制向大进制的转换,从2->10和8->10,下面说说大进制向小进制的转换。(方法是相除去余)
10进制327转八进制:
327/8 = 40 余数为7
40/8 = 5 余数为0
于是八进制数为507(第一位5是最后的商)
10进制13转2进制:
13/2 = 6 余数为1
6/2 = 3 余数为0
3/2 = 1 余数为1
所以对应的二进制数为1101(第一位1是最后的商)

再测试一下,把307(10进制)转换为16进制:
307/16 = 19 余数为3
19/16 = 1 余数为3
对应的16进制数应该是:133
再把133转回10进制:
1×16的2次幂+3×16的1次幂+3×16的零次幂
=256+48+3=307
这是程序:
#include <stdio.h>
#define BASE 8 /*要转换成几进制数/*
#define DIGIT 100 /*转换数的位数/*
int main(void)
{
int i,input;
int x[DIGIT];
printf("Please enter(Enter q to quit)")
while(scanf("%d",&input)==1)
{
for (i=0;input!=0;input/=BASE)
x[i]%=input;
for (;i<0;i--)
printf("%d",x[i]);
}
return 0;
}

要转换成16进制只要改下BASE的值就有了。本回答被提问者采纳
第4个回答  2019-03-11
数据在计算机里的存储方式都是二进制,对于一个数来说,楼主一定是问怎样用16进制和8进制的方式显示数据吧?
在C语言中,整形数据(int)在表示上分十进制,八进制,十六进制,浮点型数据(float)在表示上分小数形式和指数形式。
若要用八进制的方式显示整形数据,可用下列方式:
printf("%o",变量名);
十六进制:
printf("%x",变量名);
而在实际运算中,将一个十进制整数转化为八进制整数的方法是(以下列数为例):
60/8
商7
余4
故十进制60为八进制74
80/8
商10
余0
10/8商1
余2
故十进制80为八进制120
100/8
商12
余4
12/8
商1
余4
故十进制100为八进制144
十六进制可以仿照此方法。
对于浮点型数据(就是小数),在C语言中不存在八进制或十六进制的说法,但实际上小数也可以转化,只不过分整数部分和小数部分,把整数部分转化,再把小数部分当作一个整数转化,然后再用小数点连接起来就可以了,比如35.625,先把35转化为八进制为43,再把625转化为八进制为1161,故35.625的8进制为43.1161
相似回答