Skip to content

运算符和表达式: 构造计算过程

运算符本身是数学意义上的,在计算机(硬件)则会表现为特定的电路。而外在的表现就是 CPU 的特定指令。

运算符能够对数值执行运算来获取结果,而这个执行运算的“式子”就是表达式,运算符的操作数还可以表达式本身来组成更加复杂的表达式。

运算符分类

预算符根据操作数的个数分为一元操作符,二元操作符以及不多的多元操作符(通常就是三元)。

而根据运算符的类别又分为几个大类。

算数运算符

用于算数运算的, + - * / 是最基本的四则运算。还有一个比较特殊但是大家都支持的求余操作 % 、幂操作 **、和整除 //

算数运算符还有两个比较特殊的一元操作符,+ - 即正负,其中正通常情况下没啥意义。

类 C 语言算数运算符和等号还提供了一种简写形式,允许将赋值运算符和算术运算符结合为一个运算符:

C
i += 3;  // 等价于 i = i + 3
i -= 3;  // 等价于 i = i - 3
i *= 3;  // 等价于 i = i * 3
i /= 3;  // 等价于 i = i / 3
i %= 3;  // 等价于 i = i % 3

赋值运算符

最简单的就是 = 号,算术运算符能和它结合来构造简写的赋值运算符。

自增运算符/自减运算符

它能够对变量自省进行 +1 和 -1 操作:

C
int i = 42;
int j;

j = (i++ + 10);
// i: 43
// j: 52

j = (++i + 10)
// i: 44
// j: 54

关系运算符

关系运算符的结果是布尔值,他是流程控制的核心。关系运算符 > < >= <= == !=

逻辑运算符

逻辑运算符的操作数是布尔值,它能够执行布尔运算。通常就是与或非。很多语言中他表示为 && || !,而有些语言也会使用 AND OR NOT

位运算符

这个在现代的编程语言中不常用了,不过如果面向硬件还是很有用的。

  • ~: 按位取反(一元)
  • &: 按位与
  • |: 按位或
  • ^: 按位异或
  • <<: 左移
  • >>: 右移

他们都具有 ~= 这样的简写形式

其他杂项运算符

每个编程语言都会提供一些自己特有的运算符,不过目前大家互相借鉴也都没啥区别了。

  • in not in: 成员检测
  • ? :: 经典的三目运算符

运算符优先级

运算符具有优先级,不过目前主流语言都提供了括号来手动处理优先级。