|
|
5赋给变量x。赋值操作始终从右到左进行,绝不会反向操作。 |
|
y中的值赋给变量x。执行此语句时x的当前值将被丢弃,并被y的值替换。y的值赋给了x。因此,如果y在稍后发生更改,也不会影响x的新值。 |
|
a:4 b:7 |
a和b的最终值(分别为4和7)。请注意,即使我们之前声明了a = b,a也没有受到b最终修改的影响。 |
|
y被赋值为2与另一个赋值表达式(该表达式本身的值为5)相加的结果。它大致等同于: |
|
y。 |
|
x、y和z;始终从右到左赋值。| 运算符 | 描述 |
|---|---|
+ | 加法 (addition) |
- | subtraction (减法) |
* | 乘法 |
/ | 除法 |
% | 取模 |
%)表示,给出两个值相除的余数。例如: |
|
x包含值2,因为11除以3的结果是3,余数为2。| 表达式 | 等同于…… |
|---|---|
y += x; | y = y + x; |
x -= 5; | x = x - 5; |
x /= y; | x = x / y; |
price *= units + 1; | price = price * (units+1); |
|
|
5 |
++)和自减运算符(--)将变量中存储的值增加或减少一。它们分别等同于+=1和-=1。因此: |
|
x的值加一。++x),也可以写在变量名后面(x++)。虽然在简单表达式如x++或++x中,两者含义完全相同;但在其他需要对自增或自减操作的结果进行求值的表达式中,它们的含义可能存在重要差异:如果自增运算符用作值的前缀(++x),则表达式的值将是x增加后的最终值。另一方面,如果用作后缀(x++),值也会增加,但表达式的值是x在增加之前的值。请注意区别:| 示例 1 | 示例 2 |
|---|---|
x = 3; |
x = 3; |
y的值是x增加后的值。而在示例2中,它是x增加之前的值。| 运算符 | 描述 |
|---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
|
|
a=2,b=3,c=6,则: |
|
=,一个等号)与相等比较运算符(==,两个等号)不同;第一个(=)将右侧的值赋给其左侧的变量,而第二个(==)则比较运算符两侧的值是否相等。因此,在最后一个表达式((b=2) == a)中,我们首先将值2赋给了b,然后将其与a(也存储着值2)进行了比较,结果为true。!运算符是C++的布尔运算NOT运算符。它只有一个操作数,位于其右侧,并对其进行取反,如果其操作数为true则产生false,如果其操作数为false则产生true。基本上,它返回其操作数求值结果的相反布尔值。例如: |
|
&&和||。&&运算符对应于布尔逻辑运算AND,当两个操作数均为true时为true,否则为false。以下面板显示了运算符&&求值表达式a&&b的结果:| && 运算符(AND) | ||
|---|---|---|
a | 和 b | a && b |
真 | 真 | 真 |
真 | 假 | 假 |
假 | 真 | 假 |
假 | 假 | 假 |
||运算符对应于布尔逻辑运算OR,当任一操作数为true时为true,仅当两个操作数都为false时才为false。以下是a||b的可能结果:| || 运算符(OR) | ||
|---|---|---|
a | 和 b | a || b |
真 | 真 | 真 |
真 | 假 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
|
|
(5==5)||(3>6))中,C++首先评估5==5是否为true,如果是,则从不检查3>6是否为true。这被称为短路求值,对于这些运算符的工作方式如下:| 运算符 | 短路 |
|---|---|
&& | 如果左侧表达式为false,则组合结果为false(右侧表达式永远不求值)。 |
|| | 如果左侧表达式为true,则组合结果为true(右侧表达式永远不求值)。 |
|
|
i加一,但这仅在&&左侧的条件为true时发生,因为否则,右侧的条件(++i<n)永远不会被求值。true,则返回一个值,如果表达式求值为false,则返回另一个值。其语法是:condition ? result1 : result2 condition为true,则整个表达式求值为result1,否则为result2。 |
|
|
|
7 |
a为2,b为7,因此被求值的表达式(a>b)不为true,因此将问题标记后的第一个值(冒号后的值)b(值为7)所替换。,)用于分隔两个或多个表达式,这些表达式包含在只能有一个表达式的地方。当需要对一组表达式进行求值以获得一个值时,只考虑最右侧的表达式。 |
|
b,然后把b+2赋给变量a。所以,最后,变量a将包含值5,而变量b将包含值3。| 运算符 | 汇编等效 | 描述 |
|---|---|---|
& | 与 (AND) | 按位与 |
| | 或 (OR) | 按位包含或 |
^ | 异或 | 按位异或 |
~ | 非 (NOT) | 一元补码(位反转) |
<< | SHL | 左移位 |
>> | SHR | 右移位 |
|
|
3.14转换为整数值(3);小数部分被丢弃。这里,类型转换运算符是(int)。在C++中执行相同操作的另一种方法是使用函数式表示法,将要转换的类型作为表达式的前缀,并将表达式括在括号中。 |
|
|
|
x被赋为值1,因为char是一种大小为一字节的类型。sizeof返回的值是一个编译时常量,因此它总是在程序执行之前确定的。 |
|
x,因为%运算符的优先级高于+运算符,并且总是先进行计算。表达式的部分可以通过括号括起来来覆盖此优先级顺序,或使其意图明确。请注意区别: |
|
| 级别 | 优先级组 | 运算符 | 描述 | 分组 |
|---|---|---|---|---|
| 1 | 作用域 | :: | 作用域限定符 | 从左到右 |
| 2 | 后缀(一元) | ++ -- | 后缀自增/自减 | 从左到右 |
() | 函数形式 | |||
[] | 下标 | |||
. -> | 成员访问 | |||
| 3 | 前缀(一元) | ++ -- | 前缀自增/自减 | 从右到左 |
~ ! | 按位非/逻辑非 | |||
+ - | 一元前缀 | |||
& * | 引用/解引用 | |||
new delete | 分配/释放 | |||
sizeof | 参数包 | |||
(类型) | C风格类型转换 | |||
| 4 | 指针到成员 | .* ->* | 访问指针 | 从左到右 |
| 5 | 算术:缩放 | * / % | 乘法、除法、取模 | 从左到右 |
| 6 | 算术:加法 | + - | 加法、减法 | 从左到右 |
| 7 | 位移 | << >> | 左移、右移 | 从左到右 |
| 8 | 关系 | < > <= >= | 比较运算符 | 从左到右 |
| 9 | 相等 | == != | 相等/不等 | 从左到右 |
| 10 | 与 | & | 按位与 | 从左到右 |
| 11 | 异或 | ^ | 按位异或 | 从左到右 |
| 12 | 或 | | | 按位或 | 从左到右 |
| 13 | 合取 | && | 逻辑与 | 从左到右 |
| 14 | 析取 | || | 逻辑或 | 从左到右 |
| 15 | 赋值级表达式 | = *= /= %= += -= | 赋值/复合赋值 | 从右到左 |
?: | 条件运算符 | |||
| 16 | 排序 | , | 逗号分隔符 | 从左到右 |
常量 | 目录 | 基本输入/输出 |