# 运算符与表达式

# 运算符

运算符类型 作用
算术运算符 用于处理四则运算
关系运算符 用于处理大小关系
逻辑运算符 用于处理逻辑关系
位运算符 用于处理二进制位
赋值运算符 用于赋值
sizeof运算符 用于获取变量或类型的长度

# 算术运算符

运算符 术语 举例 结果
+ 正号 +a a
- 负号 -a -a
+ 加法 a+b a与b的和
- 减法 a-b a与b的差
* 乘法 a*b a与b的积
/ 除法 a/b a与b的商
% 取余 a%b a除以b的余数
++ 自增 a++或++a a自增1
-- 自减 a--或--a a自减1

# 赋值运算符

运算符 术语 举例 结果
= 赋值 a=b 将b的值赋给a
+= 加后赋值 a+=b a=a+b
-= 减后赋值 a-=b a=a-b
*= 乘后赋值 a*=b a=a*b
/= 除后赋值 a/=b a=a/b
%= 取余后赋值 a%=b a=a%b

# 比较运算符

c语言中,比较运算符的结果只有两种:真(非0)或假(0)。

运算符 术语 举例 结果
> 大于 a>b a是否大于b
>= 大于等于 a>=b a是否大于等于b
< 小于 a<b a是否小于b
<= 小于等于 a<=b a是否小于等于b
== 等于 a==b a是否等于b
!= 不等于 a!=b a是否不等于b

# 逻辑运算符

运算符 术语 举例 结果
&& 逻辑与 a&&b a和b都为真时,结果为真
|| 逻辑或 a||b a和b有一个为真时,结果为真
! 逻辑非 !a a为假时,结果为真

# 运算符优先级

优先级 运算符 名称 使用形式 结合方向 说明
1 [] 数组下标 a[5] 从左到右 数组a的第5个元素
1 () 圆括号 a(5) 从左到右 函数a的第5个参数
1 -> 结构体指针成员 a->b 从左到右 结构体指针a的成员b
1 . 结构体成员 a.b 从左到右 结构体a的成员b
2 ! 逻辑非 !a 从右到左 逻辑非a
2 ~ 按位取反 ~a 从右到左 按位取反a
2 ++ 自增 ++a 从右到左 a自增1
2 -- 自减 --a 从右到左 a自减1
2 + 正号 +a 从右到左 正号a
2 - 负号 -a 从右到左 负号a
2 * 取值 *a 从右到左 指针a指向的值
2 & 取地址 &a 从右到左 a的地址
2 (类型) 强制类型转换 (int)a 从右到左 将a转换为int类型
2 sizeof 取长度 sizeof(a) 从右到左 a的长度
3 * 乘法 a*b 从左到右 a与b的积
3 / 除法 a/b 从左到右 a与b的商
3 % 取余 a%b 从左到右 a除以b的余数
4 + 加法 a+b 从左到右 a与b的和
4 - 减法 a-b 从左到右 a与b的差
5 << 左移 a<<b 从左到右 a左移b位
5 >> 右移 a>>b 从左到右 a右移b位
6 < 小于 a<b 从左到右 a是否小于b
6 <= 小于等于 a<=b 从左到右 a是否小于等于b
6 > 大于 a>b 从左到右 a是否大于b
6 >= 大于等于 a>=b 从左到右 a是否大于等于b
7 == 等于 a==b 从左到右 a是否等于b
7 != 不等于 a!=b 从左到右 a是否不等于b
8 & 按位与 a&b 从左到右 a与b按位与
9 ^ 按位异或 a^b 从左到右 a与b按位异或
10 \| 按位或 a|b 从左到右 a与b按位或
11 && 逻辑与 a&&b 从左到右 a和b都为真时,结果为真
12 \|\| 逻辑或 a||b 从左到右 a和b有一个为真时,结果为真
13 ?: 条件运算符 a?b:c 从右到左 如果a为真,结果为b,否则结果为c
14 = 赋值 a=b 从右到左 将b的值赋给a
14 += 加后赋值 a+=b 从右到左 a=a+b
14 -= 减后赋值 a-=b 从右到左 a=a-b
14 *= 乘后赋值 a*=b 从右到左 a=a*b
14 /= 除后赋值 a/=b 从右到左 a=a/b
14 %= 取余后赋值 a%=b 从右到左 a=a%b
14 <<= 左移后赋值 a<<=b 从右到左 a=a<<b
14 >>= 右移后赋值 a>>=b 从右到左 a=a>>b
14 &= 按位与后赋值 a&=b 从右到左 a=a&b
14 ^= 按位异或后赋值 a^=b 从右到左 a=a^b
14 \|= 按位或后赋值 a|=b 从右到左 a=a|b
15 , 逗号 a, b 从左到右 先计算a,再计算b,结果为b

# 类型转换

有时候,我们需要将一个类型的变量转换为另一个类型的变量,这就需要用到类型转换。

  • 隐式类型转换:在程序运行过程中,编译器自动进行的类型转换。
  • 强制类型转换:在程序运行过程中,由程序员手动进行的类型转换。

# 隐式类型转换

隐式类型转换是在程序运行过程中,编译器自动进行的类型转换。

  • 当一个表达式中包含不同类型的变量时,编译器会自动将低类型转换为高类型,然后再进行运算。
#include <stdio.h>

int main() {

    int a = 10;
    double b = 3.14;
    double c = a + b;

    printf("c = %lf\n", c);

    return 0;
}

# 强制类型转换

强制类型转换是在程序运行过程中,由程序员手动进行的类型转换。

  • 强制类型转换的语法格式:(type)expression ,其中,type表示要转换的类型,expression表示要转换的表达式。
#include <stdio.h>

int main() {

    int a = 10;
    double b = 3.14;
    int c = (int)(a + b);

    printf("c = %d\n", c);

    return 0;

}