《C++游戏编程入门(第4版)》——1.6 使用变量进行算术运算

简介:

本节书摘来自异步社区出版社《C++游戏编程入门(第4版)》一书中的第1章,第1.6节,作者:【美】Michael Dawson(道森),更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.6 使用变量进行算术运算

C++游戏编程入门(第4版)
一旦有了存储值的变量,我们就希望在游戏的过程中改变它们的值——也许希望通过对击败Boss的玩家加分给予奖励,或许又希望降低气阀里的氧气含量。之前介绍的(和一些新的)运算符可以完成这些任务。

1.6.1 Game Stats 2.0程序简介

Game Stats 2.0程序对表示游戏统计值的变量进行操作并显示结果。程序运行结果如图1.6所示。


220d79087d64b127a6890e1a2ae0b60fe8fad1f6

图1.6 使用不同方式更改每个变量

从Cengage Learning网站(www.cengageptr.com/downloads)上可以下载到该程序的代码。程序位于Chapter 1文件夹中,文件名为game_stats2.cpp。

// Game Stats 2.0
// Demonstrates arithmetic operations with variables
#include <iostream>
using namespace std;
int main()
{
   unsigned int score = 5000;
   cout << "score: " << score << endl;
   //altering the value of a variable
   score = score + 100;
   cout << "score: " << score << endl;
   //combined assignment operator
   score += 100;
   cout << "score: " << score << endl;
   //increment operators
   int lives = 3;
   ++lives;
   cout << "lives: "  << lives << endl;
   lives = 3;
   lives++;
   cout << "lives: " << lives << endl;
   lives = 3;
   int bonus = ++lives * 10;
   cout << "lives, bonus = " << lives << ", " << bonus << endl;
   lives = 3;
   bonus = lives++ * 10;
   cout << "lives, bonus = " << lives << ", " << bonus << endl;
   //integer wrap around
   score = 4294967295;
   cout << "\nscore: " << score << endl;
   ++score;
   cout << "score: " << score << endl;
   return 0;
}```
陷阱
 当编译该程序时,可能得到如[Warning] this decimal constant is unsigned这样的警告。好在,警告不会阻止程序的编译和运行。该警告是整数溢出的结果。您也许希望在程序中避免整数溢出。然而,本程序有意使用了这种溢出并显示这种情况的结果。1.6.5节在讨论这段程序时,将介绍关于整数溢出的知识。
###1.6.2 修改变量值
在创建一个用于存储玩家分数的变量并显示其值后,程序将score的值增加了100。

  ` score = score + 100;`
这条赋值语句的意思是把score的当前值加上100,然后再把结果赋给score。其效果是,变量score的值增加了100。

###1.6.3 使用组合赋值运算符
上面那一行代码有更简短的版本如下:

  ` score += 100;`
这条语句的结果和score = score + 100;一样。运算符+=称为组合赋值运算符,因为它组合了算术运算(这里是加法)和赋值运算。该运算符的意思是“将右边的全部与左边的全部相加,然后将结果赋给左边”。

前面见过的所有算术运算符都有组合赋值运算符的版本,详见表1.2。


<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/78adf2dcadddc02d25c90b2e329efac1a59b5dd2.png" >
</div>

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

 `  ++lives;`
第二次如下面一行:

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

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

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

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

  ` int bonus = ++lives * 10;`
前置递增运算符会在较大的表达式使用变量之前增加变量的值。++lives10首先将lives值增加,然后再将增加结果乘以10。因此,代码与410的结果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所示)。

<div style="text-align: center">
 <img src="https://yqfile.alicdn.com/aaea56f5e24ae910304a6cdd14e222ce744b4c6b.png" >
</div>

图1.7 想象unsigned int型变量如何从最大值溢出到最小值

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

提示
  保证选取的整型的值范围够用。
相关文章
|
27天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
37 0
|
1天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
1天前
|
存储 C++
C++从入门到精通:1.1.4基础语法之控制流
C++从入门到精通:1.1.4基础语法之控制流
|
1天前
|
存储 编译器 C++
C++从入门到精通:1.1.2基础语法之数据类型
C++从入门到精通:1.1.2基础语法之数据类型
|
3天前
|
C语言 C++
c++的学习之路:4、入门(3)
c++的学习之路:4、入门(3)
17 0
|
9天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
9天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
13天前
|
存储 编译器 C++
C++从遗忘到入门(上)
C++从遗忘到入门(上)
28 0
|
16天前
|
编译器 C语言 C++
【C++】C++入门第一课(c++关键字 | 命名空间 | c++输入输出 | 缺省参数)
【C++】C++入门第一课(c++关键字 | 命名空间 | c++输入输出 | 缺省参数)
|
17天前
|
存储 程序员 编译器
C++注释、变量、常量、关键字、标识符、输入输出
C++注释、变量、常量、关键字、标识符、输入输出

热门文章

最新文章