类型、变量与标准(16)

1.6.4  递增运算符与递减运算符

接下来,程序使用递增运算符(++)使变量的值增加1。使用该运算符将变量lives的值增加了两次。第一次如下面一行:

++lives;

第二次如下面一行:

lives++;

这两行的最终效果是一样的:将lives的值从3增加到4。

正如代码所示,我们可以将运算符置于需要增加的变量之前或之后。如果放在变量之前,运算符称为前置递增运算符;如果放在变量之后,则称为后置递增运算符。

现在您也许会认为前置和后置版本没有区别,但实际上不是这样。在只需要单个变量进行递增的情况下(如之前的代码),两个运算符的最终结果一样。但是在更加复杂的表达式中,结果可能会不同。

为了演示这种重要的区别,程序在每关游戏结束时进行了一次适当的计算。程序基于玩家的生命数计算奖励,而且会增加玩家的生命数。然而,程序使用了两种不同的方式进行这种计算。第一次使用前置递增运算符。

int bonus = ++lives * 10;

前置递增运算符会在较大的表达式使用变量之前增加变量的值。++lives * 10首先将lives值增加,然后再将增加结果乘以10。因此,代码与4 * 10的结果40相等。这意味着最后lives的值为4,bonus的值为40。

将lives的值置回3后,程序再次计算了bonus。这次使用的是后置递增运算符。

bonus = lives++ * 10;

后置递增运算符会在较大的表达式使用变量之后增加变量的值。lives++ * 10的结果是lives的当前值乘以10。因此,代码与3 * 10的结果30相等。经过本次计算后,lives的值被递增。执行完该行代码后,lives的值是4,bonus的值是30。

C++还定义了递减运算符,--。它除了对变量进行递减外,其他和递增运算符一样。递减运算符也包含了两种版本(前置和后置)。

1.6.5  整数的溢出处理

当把整数变量的值增加到超过它能表示的最大值时会怎样?结果并不会产生错误,然而,这会“溢出”到类型能表示的最小值。接下来,程序要演示这种现象。首先,给score变量赋上它能存储的最大值。

score = 4294967295;

然后对变量做递增操作。

++score;

结果是score变成0。其原因在于值溢出,和汽车的里程表在超过最大值时的情况非常类似(如图1-7所示)。

对整数变量递减超出它的最小值时会“溢出”到最大值。

读书导航