进制是人为定义的带进位的计数方法,可以用有限的数字符号代表所有的数值12345。 进制包括数位、基数和位权三个要素5。 常用的进制是十进制,使用10个阿拉伯数字0-9进行记数1。 对于任何一种进制,都表示每一位置上的数运算时都是逢X进一位,其中X为基数234。
进制是学习计算机语言最基本的知识,所以一定要掌握。其实它很简单,我们日常生活中有很多进制的例子,例如:
一分钟六十秒,逢六十进一,就是六十进制;
一天二十四小时,逢二十四进一,就是二十四进制;
一星期七天,逢七进一,就是七进制;
一年十二个月,逢十二进一,就是十二进制;
小学数学是逢十进一,就是十进制;
而计算机中的数据只有 0 和 1,逢二进一,就是二进制。
所以进制就是逢几进一,r 进制就是逢 r 进一。计算机只能识别二进制,人类最习惯使用的是十进制,而为了实际需要,又建立了八进制和十六进制。八进制就是逢八进一,十六进制就是逢十六进一。
C语言中规定了八进制数前面要加0(注意是数字零而不是字母 o),十六进制数前面要加0x或0X,而十进制前面什么都不加。这是为什么呢?
比如 5,到底是十进制、八进制还是十六进制?什么都不加就默认是十进制。如果希望 5 是八进制,那么前面就加上 0;如果希望 5 是十六进制,那么前面就加上 0x 或 0X。
十进制为逢十进一,它只有 0、1、2、3、4、5、6、7、8、9 这十个基数。逢十进一的意思就是:9 再加 1 就变为 10,即向十位进了一位,原来个位回归 0。
二进制为逢二进一,它只有 0 和 1 两个基数。逢二进一的意思就是:
1 再加 1 就变成 10,即向前进了一位,原来的 1 变成 0;
再加 1 就是 11;
再加 1 又逢二,再往前进一位,进一位后第二个 1 又逢二再进位,就是 100 了;
再加 1 变成 101,再加 1 变成 110,再加 1 变成 111,再加 1 变成 1000……
二进制和十进制有一个对应的关系 | |||||||||
十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
二进制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 |
那么十进制的 5 和二进制的 101 代表的是不是同一个数字?答案是“是”,它们本质上是同一个数字。
无论是十进制、二进制、八进制还是十六进制,都只是计数的一种方式,只不过它们用的是不同的进制,所以表现形式不一样,但本质上都是同一个数字。理解了上面内容,后面很多知识就很容易理解了。
八进制就是逢八进一,它只有 0、1、2、3、4、5、6、7 这八个基数。
由上可以总结出,r 进制有 r 个基数,而且基数里面最大的是 r–1,因为基数都是从 0 开始的。比如五进制中,基数最大的是 4,基数分别为 0、1、2、3、4。
十六进制肯定有十六个基数。它的基数除了十进制的 0~9 之外,还有字母 A~F,总共加起来是十六个。注意,字母不区分大小写。十六进制是逢十六进一,F 是十五,加 1 就变成十六了,逢十六就进一,即 0x10。
下面是常用进制对照表,大家可以看一下。
十进制 | 二进制 | 八进制 | 十六进制 |
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |