当前位置:C++技术网 > 精选软件 > C++语言零基础入门教程:4.7 基本数据类型的动态解释模型

C++语言零基础入门教程:4.7 基本数据类型的动态解释模型

更新时间:2016-08-07 15:25:47浏览次数:1+次

    为了更好的理解数据类型,以及解释基本数据类型的本质,我特地绘制了一个基本数据类型的动态解释模型。特别是对字符类型的理解,非常直观。

    下面我们先来看看一张数据类型的动态解释示意图:


基本数据类型的动态解释示意图

【基本数据类型的动态解释示意图】

    计算机最直接支持的是数值类型,更准确的说,最直接的是整数类型,而且是无符号的整数类型。无符号的整数类型,根据数值的二进制表示的01组合,得到对应 的数值大小,然后转换为人类常用的十进制的数值显示出来。其中除了计算机内部的二进制到显示时的十进制之间的转换,没有其他的转换了。

    然而,有符号整数则增加了一个解释,即二进制的最高位,如10000001,最高位就是最左边的1。在有符号整数中,也就是数值范围有正数和负数以及0。 所以,正负两重天,负方是向正方借钱的人。所以,也就是两种状态。虽然说,数值的绝对值是一样,但是意义不一样。负方是欠正方钱的,双方的数值绝对值肯定 是一样的。在无符号整数的表示中,都是绝对值。为了区分正负,就在数值位的最高一位动手脚,如果为1,则是负数,如果为0,则是正数。数值大小就是后面剩 余的位数的值。

    所以,有符号数比无符号数多了一道转换解释。而浮点数因为要考虑到小数点,所以要确定小数点的位置,自然还是用二进制的几个位来表示小数点在第几位后面。 或者说,小数点的位置决定了数值的小数的精度。而且,浮点数还要区分正负,所以,比有符号整数的转换解释步骤更多。

    不过,不管步骤多还是少,唯一的目标就是让计算机一串01组合表示出不同的数值和数值类型。虽然内存中的01组合是一模一样的,但是解释方法不一样,得到的结果就不一样。所以,在上图中,数值类型的解释还是可以直接解释出来的。

    还有一种是后面要讲的类型,即布尔型。在C/C++语言中,0为假,非0为真。这个基本原则。所以,在解释的时候,看数值是否为零就可以得到真假。这个比数值类型解释更加简单方便,也是可以直接解释出来的。

    而字符类型在内存中存储的必然要符合计算机的特性,也是存储数值的。我们知道,在计算机内部存储的格式,全部都是二进制格式,直观的理解就是数值类型。这 样一来,计算机内部无法直接存储符号。所以,在符号和数值之间,应该找一个对应关系,这样就可以利用存储的数值解释成不同的字符了。所以,计算机内部存储 什么不重要,如何解释才是至关重要的。

    所以,字符类型在内存中存储的数值是字符编码表的索引值。在解释的时候,得到字符的编码表的索引值,通常叫做字符编码值,去字符编码表查找对应的符号。然后将这些符号显示出来。

    可以看到,字符的显示需要借助外部的字符编码表的帮助,如果没有字符编码表,就没法表示字符。而且,如果字符编码表的索引和字符的对应关系发生变化,同一字符编码得到的是不同的字符符号。

    我们可以看到,字符类型确实与众不同,而且会是我们今后编程经常会遇到的问题,即字符问题。就是因为有了这样一个解释的套路,不同的字符编码表得到的不同的字符,如果用错了字符编码表,就会出现乱码。

    在《C++语言零基础入门教程:4.6 字符类型的来龙去脉》已经详细的讲解了字符类型,这里可以加深对字符类型的理解,更可以在几个基本类型中对比学习。

    心中有这样的一幅动态数据类型解释图,在今后的编程中非常重要。要灵活的理解数据类型,就要懂得这张动态类型解释图。实际上并不难理解,但是要去用心理解。

    最简单的总结就是:计算机所有数据包括指令、数据、类型、类对象等,你能想到的计算机中的任何东西,在计算机中存储的,都是二进制的01序列。从直观来看,看不到任何区别。他们的区别就在解释时得到体现。不同的解释方法,得到的结果就不一样。所以,从某种角度来说,数据类型的本质,实际上是动态的解释的结果。希望读者深谙此道。