购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 计算机认识整数

瑞问:“还没说int呢。”

int就是整数的意思,我们重点关心int在计算机中的大小范围,它是能够存储-2147483648到2147483647的数字,看上去这是一个非常大的范围,所以在不严格要求内存管理的情况下,int很常用。

瑞说:“这个范围已经不小了,大部分情况下应该是够用的了。”

但是我给的这个范围并不一定真的对,我一直强调,C语言是真正高手才会使用的编程语言。你需要根据情况进行更精确的设置,有的计算机是64位的,有的是32位的,之前还有16位的,这指的是计算机一次能处理的最基本的数据长度。

瑞说:“所以在不同的计算机上,64位的数字范围和32位不同。”

int定义的是多少个这样最基本的数据长度,换句话说,在不同位数的计算机上,int的范围是有差别的。

瑞问:“变量a中能装小数吗?”

不能,int不仅定义了这个变量的大小范围,还定义了存储规则。int意味着只能存储整数。在计算机里存储小数是非常复杂的事情,因为内存设计的时候没有设计如何存储小数点,所以使用小数需要一个复杂的转变过程。为了让计算机知道这个数字需要按照小数规则进行存储,C语言提供了另外一个数据类型。

瑞问:“现在我好奇,用‘int a;’声明了变量a,我没有存任何数据在其中,那a里面有什么?”

探索: 可以用程序试一下,声明变量后立刻显示其中的值。

瑞说:“我这里显示的结果是0。”

你得到的结果是0,这和预想的一样,声明了个变量,什么都没存,那么a中默认存储的是0,也有人得到的结果不是0。

思考: 计算机的内存是用不同的电压来表示数据的。在你的程序运行之前,如果内存里已经有其他程序遗留下来的数据,那么,这些数据对于你的程序,是没有用的,要将它们对应的电压变成零。而这是需要计算机付出时间的。现在如果程序员声明了一个变量,并且没有告诉C语言这个变量里应该存储什么数。一旦C语言自作主张,把它变成0,就浪费了时间,而早年的C语言发明者不希望浪费一点点时间。

瑞说:“因为那个时候计算机运行得慢,程序员不舍得浪费时间。”

所以C语言的规则是,经过声明而没有装入任何数据的变量的数到底是什么,是不确定的。虽然这个规则合情合理,但是有很多学艺不精的程序员写程序时就“栽”在这件事情上。因为声明了变量后,在没有给它赋值的情况下,使用a里的数,给程序带来意想不到的结果。为了防止编程菜鸟犯这样的错误,同时也是因为现在的计算机运行的速度已经很快了,所消耗的运行时间,早就没那么重要,因此,有一些编译器,会默认为未赋值的变量赋初值为0。然而好的程序员会确保自己控制变量的数值,不会声明变量后不赋值就使用变量里的值,即便他知道默认初值是0。

瑞说:“明白了,我还是不要相信里面默认的数字吧。” lmYhXdOluAq71uplKEB6BafE7BxpDyNfYjzOf/A7IMxPiLZza3dbwNhi+KESGP8d



3.5 变量赋值

记住,变量如果没有赋值,那么里边的数是什么就不可靠。

瑞说:“这个程序我能猜出意思。”

a=1+2;就是赋值语句,将1+2的结果,存储到变量a的那个空间里,因此,等于号在这里的含义是赋值。

注意: 虽然这句话看上去很像是数学公式,但是需要清楚,这里的等于号和数学上的等于号在含义上是不同的。数学上的等于号指的是两边的数字是相等的,比如a+2=5,而这里的等于号是指一个将等号右边存入等号左边变量的动作,因此,a+2=5在计算机里面是不被承认的。

后边的输出语句输出a,显示目前变量a中的值是什么。

瑞说:“等号左右都有变量。”

我们沿着程序的顺序来看,int a=1;是常见的写法,意思是:在声明变量的同时就给它赋值了1。因为是初始声明变量这个时间点的赋值,所以我们也称之为赋初值。a=a+2;,在理解赋值操作的时候,我们的原则是先看等号的右边,右边的第1个数是a。对于在等号右边的变量,我们关心的是,其中的值是什么?a现在的值是1,所以等号右边就变成了1+2,结果是3,然后结果3被存入a这个变量中。体会一下,虽然等号左右是同一个变量,但其实我们关注的点是不同的。等号右边关注的是变量里面的值,而等号左边则关注存储的位置。 lmYhXdOluAq71uplKEB6BafE7BxpDyNfYjzOf/A7IMxPiLZza3dbwNhi+KESGP8d

点击中间区域
呼出菜单
上一章
目录
下一章
×