当前位置:C++技术网 > 精选软件 > C++语言零基础入门教程:4.2 整型数据类型:数学整数定义到计算机整数定义之旅

C++语言零基础入门教程:4.2 整型数据类型:数学整数定义到计算机整数定义之旅

更新时间:2015-11-17 23:33:08浏览次数:1+次

    在上节课《C++语言零基础入门教程:4.1 什么是数据类型,数据类型知识背景分析》中,我们前前后后介绍了数据类型这个概念,让你对于数据类型的认识不是停留在数学上的数字类型,也不是计算机中的int等,而是一种更为普遍的类型,也谈到了类型和具体的东西的关系,运用了哲学的思想来深入分析了一下。
    因为时隔有点长,请先复习4.1节的内容,虽然是属于思想层面的东西,但是我希望你能够在多次阅读时能够温故知新,更何况是思想类的,更容易产生新的收获。我们的学习重在思维,不要讲语法当做重点,你的个人的思维才是最重要的。时刻记住这一点。不管应试教育在如何摧残你,我们在努力的一点点的让你学会更多思考。当然,以此为基础,你学到的技术和你的理解将会更加深入。不同思想层次的人,看到同样的一个事物,看到的关键点是不一样的,就不多说了。
    下面进入正题。既然我们了解数字最早是从小学开始,从数学开始。那么我们先说说数学的数是怎么回事。
    在数学中,数字有整数,有小数。不过我们今天只讨论整数的情况。数学,是一个完全抽象的科学,思想无止尽,因而各种定义和现象也是无止尽的。整数,定义的是有单独个体单位的,以整体为一个单位计数形成的计数模型。比如一个人两个人,一只猫两只猫等。不存在半个人的说法,否则人将不完整,那么计数就失去了意义,那么这个表示就不符合定义。只要是能够以整体为单位计数的,就满足整数定义。其实这里反映的是,计数的跳跃性。在计算机领域,应用的非常广泛的数学就是离散数学。整数就是一个表现。只有量化成有限的个数,计数的单位可以以离散的个来定义,那么计算机中就好处理。而连续的就可以无限分,这对于目前的二进制计算机来说,无法处理。这才是离散数学为什么重要。这里说的就是整数的计数模型,也是整数的离散性。这样解释后应该不会难懂了吧。下图演示了离散性:
    整数的离散型
    另一个问题,数学的模型,也是人类在实践中提炼而来,所以所有定义都可以在物质世界中找到模型。数学定义也不可能是凭空产生,必须基于物质的特性,或者基于物理特性等等。在自然界中,温度的定义,我们人为的将冰水混合物定义为0摄氏度。这是物理定义,也就是物理特性。数学来表达它,就会产生两个方向的发展,一个是向上的大于0的一边,一个是向下的小于0的一边。这是物理特性,然而数学再将 此现象定义为了正负,向下的方向为负数,向上的方向就为正数。这就是数学基于物理特性建立的抽象模型。然后我们在计算和处理温度的时候,就可以用纯数学来处理了。还有很多东西都会呈现出向两个方向对立发展的,都可以定义为数学的正负。这是数学的正负理论来源。当然,这个是我自己分析的,可能不一定符合数学界的定义,只是帮助你理解。如果幸运的话,数学理论也这么定义,哈哈哈,那我也说明有这个潜质哦。
    整数的方向性,整数的正负性
    数学是严格定义的逻辑,也是纯抽象的东西,与思维类似。那么数学中定义的整数,也是一个无限的概念。没有最大数字,也没有最小数字。从中间点0可以向两个方向延伸,就是正负模型了。而延伸,可以无限。虽然整数是离散的,但是并不影响整数一直往前跑。它只是隔一个距离画一个点而已。正如人生的迷茫,也是无穷无尽的,你永远也走不到迷茫的尽头一样。这个叫做数学的无限性。
    整数的无限性,整数的无限延伸性
    大概说完这么多,你对整数是不是有了更加深刻的认识了呢?如果没有,请再想想吧。如果你早已知道了,那恭喜你,你的思维很不错哦。
    计算机是解决实际问题的工具,所以涉及的数字的处理,总是属于数学领域的一部分。计算机实在无能为力与思维比拼。我们现在讲的整数,就是从以上三个特点定义下来的。计算机中属于特定的数学应用,所以,计算机中的数学呢又与纯数学不太一样咯。
    当然,第一个的整体计数的特性,正是计算机的特性,天生丽质哦。数学应用于生活中,正负已经广泛使用,比如隔壁老王又向你借钱了,那么这就形成了一个正负关系。这个就不多解释,不然隔壁老王嫌我话多了。因为计算机的特性,也导致第三个特性就是无限延伸无法满足。这就造成了计算机中的数据类型总是有一个取值范围。或许你从来没有意识到这个问题,从数学到计算机,整数实际上被阉割了哦。计算机中的整数,只能称为是整数的一段区间而已,不是真正意义上的整数哦。
    讲完了这么多背景知识,现在来介绍计算机的整数咯。在日常问题处理中,经常使用数字计算,所以,这是基础而重要的技术点。各种算法,也都涉及到数字的运算。
    因为在一些情况下,对于数字的取值范围是有限的。比如一个人的年龄,比如一个人的体重,还有一个人的手指数目等等。不同的情况需要的数字的范围是不一样的。而对计算机来说,是用一定的位数的内存来表示数字的。位数越长,表示的数字范围越大。不过,因此,占用的内存就越大,对于内存开销要求提高。就是现在,内存也是很宝贵的。不要看他有4G、8G的。如果内存真的很便宜了,那就可以将内存技术用在硬盘上,这样计算机的性能则是巨大提升。内存比固态硬盘的速度可是快的不得了的哦。所以即使是现在,内存依然宝贵。更不用说以前的年代咯。当然对于现在来讲,占用内存越小,程序反应速度也越快咯。
    既然实际的需求中有不同的取值范围,那么计算机中为了节省成本,就想出了使用不同的位数来表示一种类型,不同的场合使用不同的类型,就可以避开内存浪费。这就是短整型、整型、长整型、长长的整型等等出现的原因。在不同的平台上,比如系统的位数有32位和64位之分,这样的话,整数类型定义如何确定所占的大小,实际上就是确定整数能够表示的范围。整型所占字节数,具体的由平台工具决定。短整型小于等于整型,长整型大于等于整型,以此类推。这是C/C++灵活之处,并不把类型的取值范围定死。
    整数的单词为integer,短的单词为short,长的单词为long,我想这个并不会难到你吧。在C/C++中,就将整型的关键字取为int,短整型取为short int,或者short,长整型取为long int,或者long,长长整型取为long long int,或者long long。
    你要确定它占几个字节,使用sizeof操作符。在sizeof(数据类型或者变量或对象)返回的就是数据类型或者变量或对象所占的字节数。需要知道整型类型所占的字节长度,一定记得使用sizeof哦,而不要去记short可能是2个字节,这样是不对的哦,虽然经常你也看到它是2个字节,但是原理是错的,只是结果刚好是而已。
    本节课就介绍这么多了。希望你消化吸收,我们的课程是高度精华的,站在至高点学习,从整体上学习,你会看的更加清楚。因此,学习的效率也是极高的,学完后你不是大神也是高手。不过,如果你还不是大神,请自己反思哦。