日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

正文

類型、變量與標(biāo)準(zhǔn)(16)

通過游戲編程實戰(zhàn)教新手學(xué)C++編程 作者:(美)Michael Dawson


1.6.4  遞增運(yùn)算符與遞減運(yùn)算符

接下來,程序使用遞增運(yùn)算符(++)使變量的值增加1。使用該運(yùn)算符將變量lives的值增加了兩次。第一次如下面一行:

++lives;

第二次如下面一行:

lives++;

這兩行的最終效果是一樣的:將lives的值從3增加到4。

正如代碼所示,我們可以將運(yùn)算符置于需要增加的變量之前或之后。如果放在變量之前,運(yùn)算符稱為前置遞增運(yùn)算符;如果放在變量之后,則稱為后置遞增運(yùn)算符。

現(xiàn)在您也許會認(rèn)為前置和后置版本沒有區(qū)別,但實際上不是這樣。在只需要單個變量進(jìn)行遞增的情況下(如之前的代碼),兩個運(yùn)算符的最終結(jié)果一樣。但是在更加復(fù)雜的表達(dá)式中,結(jié)果可能會不同。

為了演示這種重要的區(qū)別,程序在每關(guān)游戲結(jié)束時進(jìn)行了一次適當(dāng)?shù)挠嬎?。程序基于玩家的生命?shù)計算獎勵,而且會增加玩家的生命數(shù)。然而,程序使用了兩種不同的方式進(jìn)行這種計算。第一次使用前置遞增運(yùn)算符。

int bonus = ++lives * 10;

前置遞增運(yùn)算符會在較大的表達(dá)式使用變量之前增加變量的值。++lives * 10首先將lives值增加,然后再將增加結(jié)果乘以10。因此,代碼與4 * 10的結(jié)果40相等。這意味著最后lives的值為4,bonus的值為40。

將lives的值置回3后,程序再次計算了bonus。這次使用的是后置遞增運(yùn)算符。

bonus = lives++ * 10;

后置遞增運(yùn)算符會在較大的表達(dá)式使用變量之后增加變量的值。lives++ * 10的結(jié)果是lives的當(dāng)前值乘以10。因此,代碼與3 * 10的結(jié)果30相等。經(jīng)過本次計算后,lives的值被遞增。執(zhí)行完該行代碼后,lives的值是4,bonus的值是30。

C++還定義了遞減運(yùn)算符,--。它除了對變量進(jìn)行遞減外,其他和遞增運(yùn)算符一樣。遞減運(yùn)算符也包含了兩種版本(前置和后置)。

1.6.5  整數(shù)的溢出處理

當(dāng)把整數(shù)變量的值增加到超過它能表示的最大值時會怎樣?結(jié)果并不會產(chǎn)生錯誤,然而,這會“溢出”到類型能表示的最小值。接下來,程序要演示這種現(xiàn)象。首先,給score變量賦上它能存儲的最大值。

score = 4294967295;

然后對變量做遞增操作。

++score;

結(jié)果是score變成0。其原因在于值溢出,和汽車的里程表在超過最大值時的情況非常類似(如圖1-7所示)。

對整數(shù)變量遞減超出它的最小值時會“溢出”到最大值。


上一章目錄下一章

Copyright ? 讀書網(wǎng) rgspecialties.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號