Skip to content

Latest commit

 

History

History
65 lines (54 loc) · 3.95 KB

operator.md

File metadata and controls

65 lines (54 loc) · 3.95 KB

C/C++ 运算符 - 2022.8.31

“常量、变量、函数调用” 和 “用运算符把它们或表达式连接在一起” 的语句是表达式。表达式可以有返回值,也可以没有返回值。表达式还能修改一些变量的值。C++ 的运算符能分为以下几类(按优先级从达到小排序):

类型 英语 运算符 结合性
后缀 Postfix . () [] -> ++ -- ->
单目 Unary + - ! ~ * & ++ -- sizeof <-
乘性 Multiplicative * / % ->
加性 Additive + - ->
移位 Shift << >> ->
关系 Relational < > <= >= ->
相等 Eauality == != ->
位与 Bitwise AND & ->
位异或 Bitwise XOR ^ ->
位或 Bitwise OR | ->
逻辑与 Logical AND && and ->
逻辑或 Logical OR || or ->
条件 Conditional ?: <-
赋值 Assignment = += -= *= /= %= <<= >>= &= ^= |= <-
逗号 Comma , ->

计算机是用二进制处理数字的。在上面的表格中,~、“位与 / 或 / 异或运算符” 和 “赋值运算符” 的后面 5 个是一种能对变量的二进制比特位进行操作的运算符。这些运算被称为位运算。因为考虑到位运算的速度快(?),所以位运算在信息学比赛代码中很常用。

结合性 用于判断一条表达式中同级运算符的优先级。结合性是 -> 意味着左边的运算符优先级比右边的更高,反之亦然。

改变表达式的运算顺序可以使用小括号()(遇到嵌套时直接用小括号就行了,[]{} 有其它的含义)。

加性、乘性运算符

加减乘其实我们都很熟悉了,这里重点说 /(整数除法)和 %(取模运算)。到目前为止,我们学习的都是对整型变量的运算。

在 C/C++ 中,整数除法和取模运算,与数学上习惯的取模和除法不一致。

对于所有标准版本的 C/C++,规定在整数除法中:

  1. 当除数为 0 时,行为未定义;
  2. 否则 (a / b) * b + a % b 的运算结果与 a 相等。 也就是说,取模运算的符号取决于除法如何取整;而除法如何取整,这是实现定义的(由编译器决定)。

C99 和 C++11 标准版本起,规定商向零取整(舍弃小数部分);取模的符号即与被除数相同。从此以下运算结果保证为真:

5 % 3 == 2;
5 % -3 == 2;
-5 % 3 == -2;
-5 % -3 == -2;

参考 https://oi-wiki.org/math/number-theory/basic/#cc

后缀运算符

这里先说说 ++--。它们其实运算相似。以 a++ 为例:

  1. a 的值加 1;
  2. 返回 a 加 1 前的值(或者说 a - 1 的值)。

单目运算符

这里只说四个 +-++--,其它的学到再讲。

赋值运算符

赋值运算符都是围绕 = 展开的。这个运算符会做两件事(以 a = b 为例):

  1. 设置 a 的值为 b 的值;
  2. 返回 a 的值。

其它的都类似,比如 a += b 等价于 a = a + b

逗号运算符

a, b 为例:

  1. 执行 a
  2. 执行并返回 b