第三章、基础数据类型
本章我们将学习 C 语言的基础数据类型和它们的内存结构。要学好 C 语言则必须了解每个数据的内存结构。
C 语言不同于 Python 编程语言。Python 语言则完全封装了内存结构,使用者不需要了解内存结构就可以编写出符合逻辑的应用程序。
C 语言是计算机机器指令的表达方式,它的每一条语句都会翻译成相关的 CPU 指令或者数据在 CPU 上执行。C语言的执行速度基本是没有损耗的。但这也给 C 语言的编写者带来很多学习上的难度。
本章将从最简单的 进制 讲起,让我们深入了解计算机的内存结构。
1. 十进制和二进制
十进制我们并不陌生,在我们的生活中经常使用十进制的表示方法来描述现实世界的数字,比如:年龄、人口数量、身高等。
十进制就是逢十进一的表示方式,同理二进制就是逢二进一的表示方式,三进制就是逢三进一的表示方式。
计算机中常用的表示方式有十进制、二进制、八进制和十六进制。
十进制
以下是我家里的天然气表显数字。

可见这个表显数字是 05589.60 ,其中 5589 是整数部分,.60 是小数部分。我们先来研究整数部分。整数部分的表示如下:
万位 千位 百位 十位 个位
+-----+-----+-----+-----+-----+
| 0 5 5 8 9 |
+-----+-----+-----+-----+-----+
我们发现每一个位都是一个小的滚轮,滚轮的最小值是0,然后是1,…… 最大值是9。当这个表数再加上 1 后,个位就进位成为 0,十位变成 9。表显将变成 05590。
在十进制中,一个位能表示:0~9。 如果要表示更大的数,则要增加位数,两个位则能表示:0~99,三个位能表示: 0~999。十进制每增大一个位,表示数字范围增大为原来的十倍。
二进制
二进制和十进制的原理是一样的,也就是表显的滚轮只有两个数字(0和1)。是要逢二进一。一个位能表示:0~1,两个位能表示:00~11,即十进制的 0 ~ 3,三个位能表示:000~111,即十进制的 0 ~ 7。二进制每增大一个位,表示数字范围增大为原来的二倍。
八个位的二进制的表示的最小值是00000000:
7位 6位 5位 4位 3位 2位 1位 0位
+---+---+---+---+---+---+---+---+
| 0 0 0 0 0 0 0 0 |
+---+---+---+---+---+---+---+---+
八个位的二进制的表示的最大值是11111111(即十进制的255):
7位 6位 5位 4位 3位 2位 1位 0位
+---+---+---+---+---+---+---+---+
| 1 1 1 1 1 1 1 1 |
+---+---+---+---+---+---+---+---+
当数字为二进制时,位通常用 0 开始,第一个位是 0 位,第二个位是 1 位,…… 以此类推。
同理,三进制就是表显数字滚轮有三个数字,八进制就是表显数字滚轮有八个数字,十六进制就是表显数字滚轮有十六个数字。
由于计算机内部为了简化电路的复杂度,都统一使用二进制来表示数字,即低电平代表 0,高电平代表 1。
进制只是表示现实世界数值的表达方式,二进制的运算更简单,但表示位数会比较长,十进制计算相对复杂,表示同样的数,使用十进制位数较少。
思考
以下的二进制表示的数值是多少?
7位 6位 5位 4位 3位 2位 1位 0位
+---+---+---+---+---+---+---+---+
| 0 1 0 0 1 0 1 1 |
+---+---+---+---+---+---+---+---+
它表达的数值是:

注意:
二进制的底数是 2,十进制的底数则是 10,三进制的底数则是 3,以此类推。
人类为什么使用十进制,你看看自己的双手共有几个手指大概就明白了。如果有一天人类发现了外星文明,那外星文明用几进制表示数字呢?
练习:
计算以下的二进制表示数值用十进制表示是多少?
7位 6位 5位 4位 3位 2位 1位 0位
+---+---+---+---+---+---+---+---+
| 0 1 1 0 1 0 1 0 |
+---+---+---+---+---+---+---+---+