|
|
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 | 排序 | , | 逗号分隔符 | 从左到右 |
![]() 常量 | ![]() 目录 | ![]() 基本输入/输出 |