目录
1进制转换
1.1一点小废话
欢迎大家来到C语言第一课!今天介绍的是关于进制之间的转换,要学好C语言甚至后期的开发,首先需要明白我们要怎么和机器进行交流,就像与人与人之间的交流相同,但是不同地区交流的方式都不一定相同,山东人可能用山东话,东北人可能用东北话,虽然能听懂,但是总有一些“扑棱盖儿卡秃噜皮” “夜来轰上” 这种方言让其他地区的伙伴听不懂,这就好比C语言与C++的区别,代码我能看懂,但是咋有些关键字词我就是不明白呢?不管你明不明白,无论是C语言还是C++等,机器它都不明白!所以,程序语言在机器中到底是怎么运行的,我们写的程序都怎么让机器识别的,作者就从这一方面开始说起。
1.2各类进制介绍
废话不多讲,能来这个高端论坛的肯定都知道,机器是通过二进制来识别代码的。我们目前的语言,无论是C、C#、C++,还是Java、Python,都需要经过一定的编译处理为机器识别的二进制。目前主要分为二进制、八进制、十进制和十六进制四类主要进制。
二进制:英文为Binary,简写B。即0和1,特点为逢二进一,例如00、01、10、11 。无论是笔记本电脑还是32及51单片机中,都是通过二进制序列控制其实现某种功能的。
十进制:英文为Decimal,简写为D。即0-9,特点为逢十进一,主要是方便工程师通过自己熟悉的数字及指令来进行仪器操作。在程序中,经常通过格式字符“%d”或“%i”来输出十进制整数。以下是将八进制15与十六进制1f输出为十进制数: 结果为a=13,b=21 。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 015 ;
int b = 0x1f ;
printf("%d\n",a);
printf("%i\n",b);
}
13
21
八进制:英文为 Octal,简写为O。即0-7,特点为逢八进一,即0,1,2,3,4,5,6,7,10,11,12.......(此处不可以读十一/十二,而是一一、一二。)因为八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此经常常应用在计算机语言中。在程序中,经常通过格式字符“%o”来输出十进制整数,因为要区别八进制与十进制显示的区别,所以一般输出八进制整数时前边加“0”,这是格式字符为“%#o” ,如下图:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 15 ;
printf("%o\n",a);
printf("%#o\n",a);
}
17
017
十六进制:英文为Hexadecimal,简写为H,或者hex。特点为逢十六进一,即0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 。十六进制一位对应二级制四位,所以也常用于计算机语言中。在程序中,经常通过格式字符“%x”来输出十六进制整数,与八进制相同,十六进制也是有前缀的,前缀为“0x”,可以通过“%#x”来实现,如下图:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 15 ;
printf("%x\n",a);
printf("%#x\n",a);
}
f
0xf
各进制之间关系如下图所示:
十进制 |
二进制 |
八进制 |
十六进制 |
十进制 |
二进制 |
八进制 |
十六进制 |
0 |
0000 |
0 |
0 |
8 |
1000 |
10 |
8 |
1 |
0001 |
1 |
1 |
9 |
1001 |
11 |
9 |
2 |
0010 |
2 |
2 |
10 |
1010 |
12 |
a |
3 |
0011 |
3 |
3 |
11 |
1011 |
13 |
b |
4 |
0100 |
4 |
4 |
12 |
1100 |
14 |
c |
5 |
0101 |
5 |
5 |
13 |
1101 |
15 |
d |
6 |
0110 |
6 |
6 |
14 |
1110 |
16 |
e |
7 |
0111 |
7 |
7 |
15 |
1111 |
17 |
f |
1.3进制之间转换
1.3.1 二进制转换
二进制转为十进制:
二进制转十进制通常使用对每一位的2的权重次幂累加进行计算,公式为
A为各位次的值(0或者1),t为各位权 。例如二进制10110101转换为十进制如下图:
二进制转为八进制:
因为2^3=8,所以二进制的三位可以作为八进制的一位,通常是从低位开始,二进制三位一组变一位八进制(也就是我们说的421码),最高位不足三位前方补0:
二进制 | 八进制 | 二进制 | 八进制 |
---|---|---|---|
000 | 0 | 100 | 4 |
001 | 1 | 101 | 5 |
010 | 2 | 110 | 6 |
011 | 3 | 111 | 7 |
例如二进制10101100,三个分为一组,不够位数的最高位前方补0,就会得到010 101 100 ,把每三位二进制变为八进制为2 5 4 ,所以10101100变为八进制为0254 。
二进制转为十六进制:
基本原理与二进制转八进制相同,不过此时应该将二进制的四位一组,不够四位的在最高位前方补0 (一般使用8421BCD码)。例如10101100 ,四位一组变为1010 1100 把每四位二进制转变为一位十六进制得到a c,所以10101100变为十六进制为0xac 。
8421BCD码 | |||
二进制 |