章节导学
计算机中的存储单元为什么要分类型呢?
现实世界中的数据可以根据形态分类,如3、-5是整数,且一个是正的,一个是负的;2.3、1.23×10-5是小数;a、+是字符。计算机中没有正负号,没有小数点,没有……,只有0和1。无论整数、小数或字符,所有数据在计算机中都将编码成由0和1组成的二进制串。假设计算机中一个存储单元的存储状态为01011010,那么这个存储单元的值(解码后的值)在理论上可以是一个整数,可以是一个小数,也可以是一个字符。不确定类型的存储单元,没有确定的值,是无法使用的。只有存储单元的类型确定以后,它的值才能确定。因此,计算机中的存储单元要分类型。
作为存储单元的标识,C语言程序中的变量有明确的类型,因此,它们的实际值是确定的。在输出一个变量的值时,printf函数会根据不同的格式字符把它解码成不同的值。输出值的“多样性”与变量实际值的“确定性”并不矛盾。
计算机中的编码在形态上具有统一性(全部为0和1组成的二进制串),因此,计算机中不同类型存储单元之间的相互赋值在理论上就变得没有任何障碍(可以直接拷贝)。这种特点体现在程序中,就表现为一些似乎矛盾的赋值,如某变量只能取非负值,但程序中却依然用一个负数给它赋值;明明是字符型变量,但程序中却用整数给它赋值。
数据类型决定了计算机的计算能力。
当某种数据确定用什么样的存储单元存储后,计算机的计算能力实际上就已经确定了。如果计算机中用4个字节存储整数,则计算机中所有的整数无论大小都会是32位的二进制数,同时,计算机的“整数计算能力”仅限于4个字节所能编码整数的范围,计算机中不可能出现此范围之外的整数。如果计算机中用8个字节存储小数,则计算机的“小数计算能力”只能精确到小数点后的某位(具体精度视编码规则而定,通常为15至16位)。正如一个算盘,完工后它的“计算能力”就确定了。并非它“不会”算更大的数,而是它的“硬件”制约了它的能力。
计算机的特点影响着与之沟通的C语言。其它编程语言也是如此。
学习C语言遇到问题时应养成“大胆猜测,小心求证”的好习惯,这也是通过学习知识培养自身能力所必须具备的好习惯。