原创:二进制,八进制,十六进制以及互算 一
作者 斯人 | 发布于 2012 年 1 月 6 日

之前..我对 二进制,八进制与十六进制只知道皮毛..

在读了白话C++的进制教程之后,才让我更清晰明了.

下面我总结下.做下记录.

懂点计算机的人 都知道..计算机最基本的数制就是二进制,因为它只有0,1

十进制大家都知道 为什么是十进制?

因为逢十进一 这不用说了吧?

  • 二进制

概念:二进制就是逢二进1它只有两个数,0和1

现实中有二进制吗?当然了..

你穿的袜子.逢2进1..每两只袜子就是一双

时钟用的也是二进制,每过两个12小时 就是一天

等等还有很多

  • 八进制

概念:八进制就是逢八进一,它有八个数 0,1,2,3,4,5,6,7 注意是从0 开始

在C语言中规定,若表示是一个八进制数 前面要加上0

例如 0230 就是八进制数的0230

  • 十六进制

概念:十六进制就是逢十六进一位..

等等,十六? 从0开始一共才10个数了.哪儿来的十六?确实没有表示十六的数.

所以 规定 字母里面的A,B,C,D,E,F 就代表 10,11,12,13,14,15

在C语言中规定 写一个十六进制数前面要加上0x,注意那是零,不是字母O

如 int a = 0x17FCA0;

为什么?

给你一个数 1703,你知道是十进制数还是十六进制数吗?

为什么要有这么多进制呢?

其实十六进制的存在,纯粹是为了二进制。二进制是肯定必定以及一定要存在的,因为机器用的就它。但二进制数实在太“占位置”了,虽然最直观,但读写都不方便。如果用十进制呢——当然,编程序我们最常用还是十进制,仅当要需要表达和机器相关的数据,一些内存地址时,才会考虑二进制——十进制数和二进制转换比较复杂,十六进制就不一样了,它和二进制的之间的转换非常简单快速。

一个数用二进制表达,实际就是由多个“2的N次方的数”相加。因为16是2的4次方,因此非常这两个进制之间的转换特别容易(想想10是2的几次方呢?)。

或许还会问:还有很多数是2的整数次乘方啊,比如8是2的3次方,32是2的5次方,为什么偏偏是16呢?原来。一个字节(byte)是8位,但用“2的8次方”作为进制,显然太大了。另外,我们还会有把一个字节分为“高字节(高4位)”和“低字节(低4位”的需要,所以,用16(2的4次方)来作为进制最方便。说千道万,试一试会更清楚些:下面就让我们做一些二进制数与十六进制数的互换运算。

基本概念都请清楚后,我们来看看他们的运算

  • 二进制转十进制

 二进制1011怎么转为十进制呢

1011=1*2的三次方+0+1*2的1次方+1*2的0次方=8+2+1=11

  • 二进制转十六进制数

方法:转换二进制数,请以4位为一组,为什么是4位,而不是5位六位?因为2的四次方是16,(如果转换为八进制,那就是每3位一组啦? 聪明) .然后从高位看到低位,各位的权值依次是:“8、4、2、1”。如果                        该位是1,就加上权值,否则不加,就可以得到一个十进制数,然后再快速换算成十六进制(要求你熟记A~F对应的十进制值)

1000=8+0+0+0=8=0x8

1001=8+0+0+1=9=0x9

1010=8+0+2+0=10=0xA

1011=8+0+2+1=11=0xA1

1111=8+4+2+1=15=0xF

真正能体现十六进制的方便,在于位数更多时

二进制数0101 1110,转换成十六进制 怎么算呢?

  1. 第一种方法 :先转换成十进制

0101 1110=0+1*(2的6次方)+0+1*2的4次方  +  1*(2的3次方)+1*(2的二次方)+1*(2的一次方)+0 =0+64+0+16 +  8+4+2+0=80 + 14=94

  1. 第二种方法 : 用上面的权值来换算如

 0101=0+4+0+1=5=0x5

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

因为 0x5是高位,0xE是低位, 所以 最后结果等于0x5E

  • 十六进制转二进制

        用权值法来计算 如

        0xA=10=8+2=10

        0xF=15=8+2+4+1=1111

0xD=13=8+0+4+1=1011

怎么样很简单吧

来个难的

0xABCDEF 怎么算? 没关系 一个一个来

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

 B=11=8+0+2+1=1001

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

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

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

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

最后的二进制就是  1010 1001 1100 1101 1110 1111

怎么样很简单吧

  • 八进制转十进制

       int a=0173; 这个转为十进制是几?

       我们来算下

0173=1*8的2次方+7*8的1次方+3*1的0次方=64+56+3=123

它表示十进制的123;

  • 二进制转八进制

二进制数 11001010 转换为八进制是多少?

我们来算算

我们先把他们拆分,从低位往高位每三位分一组,为什么是三位?因为2的三次方是8,然后转换为八进制

就是11 001 010

11=1*2的1次方+1*2的0次方=3

001=1*2的0次方=1

010=1*2的1次方=2

=0312

最后转换为八进制为 0312

  • 八进制转二进制

八进制数换算成二进制数,应该是张口就来。请熟记八进制数,每个数的二进制值:

7 -> 111(2) 3 -> 011(2)
6 -> 110(2) 2 -> 010(2)
5 -> 101(2) 1 -> 001(2)
4 -> 100(2) 0 000(2)


那么  十进制 怎么转换为 二进制 ,八进制,十六进制呢?

下章继续吧? ^.^

原文出处:http://www.imsiren.com/archives/155