文档介绍:第六章二进制、八进制、十六进制
为什么需要八进制和十六进制?
二、八、十六进制数转换到十进制数
  二进制数转换为十进制数
  八进制数转换为十进制数
  八进制数的表达方法
  八进制数在转义符中的使用
  十六进制数转换成十进制数
  十六进制数的表达方法
  十六进制数在转义符中的使用
十进制数转换到二、八、十六进制数
  10进制数转换为2进制数
  10进制数转换为8、16进制数
二、十六进制数互相转换
原码、反码、补码
通过调试查看变量的值
本章小结
这是一节“前不着村后不着店”的课。不同进制之间的转换纯粹是数学上的计算。不过,你不必担心会有么复杂,无非是乘或除的计算。
生活中其实很多地方的计数方法都多少有点不同进制的影子。
比如我们最常用的10进制,其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。
至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。
生活中还有:七进制,比如星期。十六进制,比如小时或“一打”,六十进制,比如分钟或角度……
 
(该版课程的内容更新及订正均已停止)
 旧版课程打包下载
----------------------------------
[想看涵盖“面向对象”、“图形编程”、“泛型编程”……
的“最新2008年版白话C++”课程,请点击!] (另有: 博客版)
 
 
为什么需要八进制和十六进制?
编程中,我们常用的还是10进制……必竟C/C++是高级语言。
比如:
int a = 100,b = 99;
不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:
0000 0000 0000 0000 0110 0100
面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。
用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?
2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现这一点。
二、八、十六进制数转换到十进制数
二进制数转换为十进制数
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……
所以,设有一个二进制数:0110 0100,转换为10进制为:
下面是竖式:
0110 0100 换算成十进制
第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
八进制数转换为十进制数
八进制就是逢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 +