跳到主要内容
版本:release

运算符

  • 位运算

位运算只能用于整数类型的变量,且需当它们拥有等长位模式时。

  • 位运算 -- 二元运算符

按位与 &: 对应位置上的值经过和运算结果,具体参见和运算符,第 4.5.1 节,并将 T(true)替换为 1,将 F(false)替换为 0

1 & 1 -> 1
1 & 0 -> 0
0 & 1 -> 0
0 & 0 -> 0

按位或 |: 对应位置上的值经过或运算结果,具体参见或运算符,第 4.5.1 节,并将 T(true)替换为 1,将 F(false)替换为 0

1 | 1 -> 1
1 | 0 -> 1
0 | 1 -> 1
0 | 0 -> 0

按位异或 ^: 对应位置上的值根据以下规则组合:

1 ^ 1 -> 0
1 ^ 0 -> 1
0 ^ 1 -> 1
0 ^ 0 -> 0

按位非 ~

int i = 3;
printf("~i=%d",~i);// -4
  • 位运算 -- 移位运算符

位左移 <<:

用法:bitP << n bitP 的位向左移动 n 位,右侧空白部分使用 0 填充;如果 n 等于 2,则结果是 2 的相应倍数,即 2 的 n 次方。例如:

1 << 10 // 等于 1 KB
1 << 20 // 等于 1 MB
1 << 30 // 等于 1 GB

位右移 >>:

用法:bitP >> n。 bitP 的位向右移动 n 位,左侧空白部分使用 0 填充;如果 n 等于 2,则结果是当前值除以 2 的 n 次方

  • 逻辑运算符

==、!=、<、<=、>、>=

逻辑与 &&

bool flag = 1 && 0;// flag is false

逻辑或 ||

bool flag = 1 || 0;// flag is true

逻辑非 !

bool flag = !0;// flag is true

它们之所以被称为逻辑运算符是因为它们的运算结果总是为布尔值 bool。例如:

flag = 10 > 5; // flag is true
  • 算术运算符

常见可用于整数和浮点数的二元运算符有 +、-、* 和 /.

/ 对于整数运算而言,结果依旧为整数,例如:9 / 4 -> 2.

取余 % 运算符只能作用于整数:9 % 4 -> 1。

整数除以 0 会导致程序崩溃,Error(-1): Divided by zero.

浮点数除以 0.0 会返回一个无穷尽的结果,使用 inf 表示。

  • 逗号运算符

表达式,表达式,…

int a = 1,b = 2;
  • 三目运算符
a > b ? a : b 

是一个条件表达式,如果a > b条件为真,则条件表达式去值a,否则取值b

  • 复合赋值运算符

+= , -= , *= , /= , %= , &= , |= , ^= , ~= , <<= , >>=

i += 4; // i = i + 4
j %= 2; // j = j % 2
  • 自增自减运算符

自加运算符“++”和自减运算符“--”的作用是使运算变量的值增1或减1

自加、自减运算符是单目运算符。其运算对象可以是整型或实型变量,但不能是常量和表达式,因为不能给常量或者表达式赋值

自加、自减运算符可以作为可以作为前缀运算符,也可以作为后缀运算符构成一个表达式,如++i、--i、i++、i--等都是合法的表达式

++i、--i:在使用i之前,先使i的值加1或减1,再使此时的表达式的值参加运算

i++、i--:在使用i之后,使i的值加1或减1,再使此时的表达式的值参加运算

  • 运算符的优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。

下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。


下面列出int类型优先级排序列表,其优先级从上往下递减。

序号运算符结合性
1() , []从左向右
2!(非) , +(正) , -(负) , ~(按位非) , ++ , --从左向右
3* , / , %从左向右
4+(加) , -(减)从左向右
5<<(左移) , >>(右移)从左向右
6< , <= , > , >=从左向右
7== , !=从左向右
8&(按位与)从左向右
9^(按位异或)从左向右
10一竖(按位或)从左向右
11&&(与)从左向右
12两竖(或)从左向右
13?:从右向左
14= , += , -= , *= , /= , %= , &= , |= , ^= , ~= , <<= , >>=从右向左

注:因为表格会将 “|”格式化,故用文字表一竖表示“|”,两竖表示“||”


下面列出float类型优先级排序列表,其优先级从上往下递减。

序号运算符结合性
1() , []从左向右
2!(非) , +(正) , -(负) , ++ , --从左向右
3* , / , %从左向右
4+(加) , -(减)从左向右
5< , <= , > , >=从左向右
6== , !=从左向右
7&&(与)从左向右
8两竖(或)从左向右
9?:从右向左
10= , += , -= , *= , /= , %=从右向左

因为表格会将 “|”格式化,故用文字两竖表示“||”