基于硬件的C(C++)语言程序设计教程6:进制转换
本系列文章希望探讨以硬件为平台讲述C(C++)知识的一个新的途径,改变目前大多数C语言教程仅注重C语言本身的语法规则,而脱离其应用环境的现状。希望读者通过本教程的学习,能够立刻学以致用,真正将所学知识应用到项目实践中。
开发环境:Atmel Studio 7.0
硬件平台:Microchip AVR ATmega168PA
参考教材:C++程序设计(第3版) 谭浩强编著,清华大学出版社
备注:1、教程仅适合初学者,高手请绕过
2、本文大部分内容来源于网络,经整理而得
一、 进制的概念
在计算机语言中常用的进制有二进制、八进制、十进制和十六进制,十进制是最主要的表达形式。
对于进制,有两个基本的概念:基数和运算规则。
基数:基数是指一种进制中组成的基本数字,也就是不能再进行拆分的数字。二进制是0和1;八进制是0-7;十进制是0-9;十六进制是0-9+A-F(大小写均可)。也可以这样简单记忆,假设是n进制的话,基数就是【0,n-1】的数字,基数的个数和进制值相同,二进制有两个基数,十进制有十个基数,依次类推。
运算规则:运算规则就是进位或借位规则。例如对于二进制来说,该规则是“满二进一,借一当二”;对于十进制来说,该规则是“满十进一,借一当十”。其他进制也是这样。
二、 二、八、十、十六进制基数对照表
三、(二、八、十六进制) → (十进制)
1、二进制 ==》十进制
方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
例:将二进制的(101011)B转换为十进制的步骤如下:
1. 第0位 1 x 2^0 = 1;
2. 第1位 1 x 2^1 = 2;
3. 第2位 0 x 2^2 = 0;
4. 第3位 1 x 2^3 = 8;
5. 第4位 0 x 2^4 = 0;
6. 第5位 1 x 2^5 = 32;
7. 读数,把结果值相加,1+2+0+8+0+32=43,即(101011)B=(43)D。
2、二进制 ==》八进制
方法:八进制数从低位到高位(即从右往左)计算,第0位的权值是8的0次方,第1位的权值是8的1次方,第2位的权值是8的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
八进制就是逢8进1,八进制数采用 0~7这八数来表达一个数。
例:将八进制的(53)O转换为十进制的步骤如下:
1. 第0位 3 x 8^0 = 3;
2. 第1位 5 x 8^1 = 40;
3. 读数,把结果值相加,3+40=43,即(53)O=(43)D。
3、二进制 ==》十六进制
方法:十六进制数从低位到高位(即从右往左)计算,第0位的权值是16的0次方,第1位的权值是16的1次方,第2位的权值是16的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
十六进制就是逢16进1,十六进制的16个数为0123456789ABCDEF。
例:将十六进制的(2B)H转换为十进制的步骤如下:
1. 第0位 B x 16^0 = 11;
2. 第1位 2 x 16^1 = 32;
3. 读数,把结果值相加,11+32=43,即(2B)H=(43)D。
四、(十进制) → (二、八、十六进制)
1、十进制 ==》二进制
例:将十进制的(43)D转换为二进制的步骤如下:
2、十进制 ==》八进制
例:将十进制的(796)D转换为八进制的步骤如下:
3、十进制 ==》十六进制
例:将十进制的(796)D转换为十六进制的步骤如下:
五、(二进制) ↔ (八、十六进制)
1、二进制 ==》八进制
例:将二进制的(11010111.0100111)B转换为八进制的步骤如下:
2、八进制 ==》二进制
例:将八进制的(327)O转换为二进制的步骤如下:
3、二进制 ==》十六进制
例:将二进制的(11010111)B转换为十六进制的步骤如下:
4、十六进制 ==》二进制
例:将十六进制的(D7)H转换为二进制的步骤如下:
六、(八进制) ↔ (十六进制)
1、八进制 ==》十六进制
方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。
2、十六进制 ==》八进制
方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。
任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。
原创性文章,转载请注明出处****:http://blog.****.net/qingwufeiyang12346。