十进制与二进制八进制十六进制的转换

来源:互联网 发布:淘宝衣服女装外套 编辑:程序博客网 时间:2024/04/30 04:07
 

10转16: 
  100以内一点的10转16心算比较快,复杂的用“计算器”算了。10转16用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为各位数。

  16转10:
  用相反的道理,将十位数乘以16加上个位数。如5A,将5乘以16得80,加上A的10进制10,结果是90。

  其实这些都是计算机基础,基本上学过计算机的都会学到这些,但留意一下,他们对于修改是十分有用的,平时多多留意,多多试验,你也会成为修改高手。

   个人推荐使用:WINDOWS中点击“开始”--”程序“--“附件”--“计算器”,按 “查看”再选“科学型”,就可以方便的进行各进制的转换了(如:你要转换10进制90000000为16进制,点“十进制”,输入90000000,再点一下“16进制”,就会看到55D4A80,转换就完成了。其他同理)。 

   二进制、八进制、十六进制
    

这是一节“前不着村后不着店”的课。不同进制之间的转换纯粹是数学上的计算。不过,你不必担心会有么复杂,无非是乘或除的计算。

生活中其实很多地方的计数方法都多少有点不同进制的影子。

比如我们最常用的10进制,其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。

至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。

生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度……

 

6.1为什么需要八进制和十六进制?

 

编程中,我们常用的还是10进制……必竟C/C++是高级语言。

比如:

inta=100,b=99;

不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。

但,二进制数太长了。比如int类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:

000000000000000001100100

面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++没有提供在代码直接写二进制数的方法。

 

用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?

2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现这一点。

 

6.2二、八、十六进制数转换到十进制数

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

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

所以,设有一个二进制数:01100100,转换为10进制为:

下面是竖式:

 

01100100换算成十进制

 

第0位0*20 = 0

第1位0*21 = 0

第2位1*22 = 4

第3位0*23 = 0

第4位0*24 = 0

第5位1*25 =32

第6位1*26 =64

第7位0*27 = 0    +

---------------------------

             100  

 

用横式计算为:

0*20+0*21+1*22+1*23+0*24+1*25+1*26+0*27=100

 

0乘以多少都是0,所以我们也可以直接跳过值为0的位:

1*22+1*23+ 1*25+1*26=100

 

6.2.2八进制数转换为十进制数

八进制就是逢8进1。

八进制数采用0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

所以,设有一个八进制数:1507,转换为十进制为:

用竖式表示:

 

1507换算成十进制。

 

第0位7*80=7

第1位0*81=0

第2位5*82=320

第3位1*83=512  +

--------------------------

             839

同样,我们也可以用横式直接计算:

7*80+0*81+5*82+1*83=839

 

结果是,八进制数1507转换成十进制数为839

 

6.2.3八进制数的表达方法

C,C++语言中,如何表达一个八进制数呢?如果这个数是876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。

所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。

由于C和C++都没有提供二进制数的表达方法,所以,这里所学的八进制是我们学习的,CtC++语言的数值表达的第二种进制法。

现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:

 

inta=100;

我们也可以这样写:

inta=0144;//0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。

 

千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。

 

6.2.4八进制数在转义符中的使用

我们学过用一个转义符'/'加上一个特殊字母来表示某个字符的方法,如:'/n'表示换行(line),而'/t'表示Tab字符,'/''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'/'后面接一个八进制数,用于表示ASCII码等于该值的字符。

比如,查一下

(在计算机中,÷用/来表示)

 

如果是在考试时,我们要画这样表还是有点费时间,所更常见的换算过程是使用下图的连除:

 

(图:1)

请大家对照图,表,及文字说明,并且自已拿笔计算一遍如何将6转换为二进制数。

说了半天,我们的转换结果对吗?二进制数110是6吗?你已经学会如何将二进制数转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。

 

6.3.210进制数转换为8、16进制数

 

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

 

来看一个例子,如何将十进制数120转换成八进制数。

 

用表格表示:

 

120转换为8进制,结果为:170。

 

非常非常开心,10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成16。

 

同样是120,转换成16进制则为:

 

120转换为16进制,结果为:78。

 

请拿笔纸,采用(图:1)的形式,演算上面两个表的过程。

 

6.4二、十六进制数互相转换

 

二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

我们也一样,只要学完这一小节,就能做到。

首先我们来看一个二进制数:1111,它是多少呢?

你可能还要这样计算:1*20+1*21+1*22+1*23=1*1+1*2+1*4+1*8=15。

然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为23=8,然后依次是22=4,21=2,20=1。

 

记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。

 

下面列出四位二进制数xxxx所有可能的值(中间略过部分)

 

仅4位的2进制数 快速计算方法  十进制值    十六进值

1111       =8+4+2+1 =15         F

1110       =8+4+2+0 =14         E

1101       =8+4+0+1 =13         D          

1100       =8+4+0+0 =12         C          

1011       =8+4+0+1 =11         B          

1010       =8+0+2+0 =10         A

1001       =8+0+0+1 =10         9

....

0001       =0+0+0+1 =1          1

0000       =0+0+0+0 =0          0

 

二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。

如(上行为二制数,下面为对应的十六进制):

 

11111101,10100101,10011011

 F   D  , A   5  , 9   B  

 

反过来,当我们看到FD时,如何迅速将它转换为二进制数呢?

先转换F:

看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8+4+2+1,所以四位全为1:1111。

接着转换D:

看到D,知道它是13,13如何用8421凑呢?应该是:8+2+1,即:1011。

所以,FD转换为二进制数,为:11111011

 

由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。

比如,十进制数1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:

 

结果16进制为:0x4D2

 

然后我们可直接写出0x4D2的二进制形式:010010110010。

其中对映关系为:

0100--4

1011--D

0010--2

 

同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。

下面举例一个int类型的二进制数:

01101101111001011010111100011011

我们按四位一组转换为16进制:6DE5AF1B

原创粉丝点击