《C++游戏编程入门(第4版)》——1.4 使用算术运算符

简介:

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

1.4 使用算术运算符

C++游戏编程入门(第4版)
不管是清算杀死的敌人数目或是降低玩家的生命值,程序都需要做一些数学运算。C++和其他语言一样有内置算术运算符。

1.4.1 Expensive Calculator 程序简介

大多数比较认真的计算机游戏程序员会在顶级、高性能的游戏平台上投入大量的精力。接下来,Expensive Calculator这个程序将计算机变成一个简单的计算器。该程序演示了内置算术运算符,程序结果如图1.4所示。


b61eed3efc00a3d1945e7eb06cd9e9de0bd652a6

图1.4 C++可以进行加法、减法、乘法、除法甚至求余运算

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

// Expensive Calculator
// Demonstrates built-in arithmetic operators
#include <iostream>
using namespace std;
int main()
{
   cout << "7 + 3 = " << 7 + 3 << endl;
   cout << "7 - 3 = " << 7 - 3 << endl;
   cout << "7 * 3 = " << 7 * 3 << endl;
   cout << "7 / 3 = " << 7 / 3 << endl;
   cout << "7.0 / 3.0 = " << 7.0 / 3.0 << endl;
   cout << "7 % 3 = " << 7 % 3 << endl;
   cout << "7 + 3 * 5 = " << 7 + 3 * 5 << endl;
   cout << "(7 + 3) * 5 = " << (7 + 3) * 5 << endl;
   return 0;
}```
###1.4.2 加法、减法与乘法
程序使用内置的算术运算符来实现加法(加号,+)、减法(减号,−)和乘法(星号,*)运算。图1.4所示结果和预期一致。

每个算术运算符都是表达式的一部分。每个表达式都可以求出单个值。例如,表达式7+3求值得到10,然后发送给cout输出。

###1.4.3 理解整型与浮点型除法
接下来的一行代码中使用斜线(/)来做除法运算。然而,输出结果可能有点让人出乎意料。根据C++的实现方式(以及该程序平台),7除以3等于2。为什么?原因在于,整型(没有小数部分的数)的算术运算结果总是整型。因为7和3都是整型,所以结果也必须是整型,其小数部分被去除。

如果要得到保留小数部分的结果,那么至少需要有一个数是浮点型(带小数部分的数)。

接下来一行代码中表达式7.0/3.0的结果便保留了小数部分。这次结果更精确,是2.33333。

陷阱
 您也许注意到7.0/3.0(2.33333)的结果虽然包含了小数部分,但这个结果仍然是被截短过的(真正的结果在十进制小数点后面有无穷多个3)。需要了解的是,计算机一般只存储浮点数的有限个数的高位数字。然而,C++提供了不同种类的浮点数以满足最苛刻的要求,甚至可以满足计算密集型的3D游戏的要求。
###1.4.4 使用模除运算符
接下来的一条语句使用的运算符可能比较陌生——模除运算符(%)。模除运算符返回整型除法的余数。在本例中,7%3结果为7/3的余数1。

###1.4.5 运算符的优先级
C++中的算术表达式和代数学中一样从左到右依次求值。但是有些运算符的优先级比较高,无论处于什么位置都将首先求值。乘法、除法和模除运算的优先级相同,都高于加法和减法。

接下来的一行代码演示了优先级的作用。因为乘法的优先级高于加法,所以首先计算乘法的结果。因此,表达式7+3*5等于7+15,结果为22。

如果需要首先计算较低优先级的运算操作,可以使用括号,它比任何算术运算符的优先级都高。所以在下一条语句中,表达式(7+3)*5等于10*5,结果为50。

提示
  C++运算符一览表及其优先级详见附录B。
相关文章
|
3月前
|
存储 安全 编译器
c++入门
c++作为面向对象的语言与c的简单区别:c语言作为面向过程的语言还是跟c++有很大的区别的,比如说一个简单的五子棋的实现对于c语言面向过程的设计思路是首先分析解决这个问题的步骤:(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤(2) (9)输出最后结果。但对于c++就不一样了,在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:(1)黑白双方,这两方的行为是一样的。(2)棋盘系统,负责绘制画面。
41 0
|
7月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
6月前
|
存储 分布式计算 编译器
C++入门基础2
本内容主要讲解C++中的引用、inline函数和nullptr。引用是变量的别名,与原变量共享内存,定义时需初始化且不可更改指向对象,适用于传参和返回值以提高效率;const引用可增强代码灵活性。Inline函数通过展开提高效率,但是否展开由编译器决定,不建议分离声明与定义。Nullptr用于指针赋空,取代C语言中的NULL。最后鼓励持续学习,精进技能,提升竞争力。
|
11月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
120 2
C++入门12——详解多态1
|
11月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
159 1
|
11月前
|
存储 C++ 容器
C++入门9——list的使用
C++入门9——list的使用
87 1
|
11月前
|
C语言 C++ 容器
C++入门7——string类的使用-1
C++入门7——string类的使用-1
77 0
|
11月前
|
程序员 C语言 C++
C++入门5——C/C++动态内存管理(new与delete)
C++入门5——C/C++动态内存管理(new与delete)
198 1
|
11月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
167 0
C++入门6——模板(泛型编程、函数模板、类模板)