| 运算符类型 | 作用 |
|---|---|
| 算术运算符 | 用于处理四则运算 |
| 赋值运算符 | 用于将表达式的值赋给变量 |
| 比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
| 逻辑运算符 | 用于根据表达式的值返回真值或假值 |
| 位运算符 | 用于处理数据的位运算 |
| sizeof运算符 | 用于求字节数长度 |
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| + | 正号 | +3 | 3 |
| - | 负号 | -3 | -3 |
| + | 加 | 10 + 5 | 15 |
| - | 减 | 10 - 5 | 5 |
| * | 乘 | 10 * 5 | 50 |
| / | 除 | 10 / 5 | 2 |
| % | 取模(取余) | 10 % 3 | 1 |
| ++ | 前自增 | a=2; b=++a; | a=3; b=3; |
| ++ | 后自增 | a=2; b=a++; | a=3; b=2; |
| – | 前自减 | a=2; b=–a; | a=1; b=1; |
| – | 后自减 | a=2; b=a–; | a=1; b=2; |
#include03. 赋值运算符int main() { int a = 5; int b = 2; double c = a/b; printf("c = %lfn",c); //打印结果: 2.000000 不是我们想要的 //两个数相除,想要得到小数,除数或被除数必须有一个是浮点数,否则会取整 int d = a % b; //a = 5, b = 2; printf("d = %dn",&d); //打印结果1 //后置++,先用后加,先执行完这个语句,a的值赋值给d,a再自加1 d = a++; printf("d = %dn",&d); //打印结果5 //前置++,先加后用,a先自加1,再执行这个语句,将a的结果赋值给d d = 1; a = 5; d = ++a; printf("d = %dn",&d); //打印结果6 return 0; }
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| = | 赋值 | a=2; b=3; | a=2; b=3; |
| += | 加等于 | a=0; a+=2; | a=2; |
| -= | 减等于 | a=5; a-=3; | a=2; |
| *= | 乘等于 | a=2; a*=2; | a=4; |
| /= | 除等于 | a=4; a/=2; | a=2; |
| %= | 模等于 | a=3; a%2; | a=1; |
#include04. 比较运算符int main() { int a = 2; a += 2; //a加上2后,在赋值给a,相当于 a = a + 2; //后面的类似 return 0; }
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| == | 相等于 | 4 == 3 | 0 |
| != | 不等于 | 4 != 3 | 1 |
| < | 小于 | 4 < 3 | 0 |
| > | 大于 | 4 > 3 | 1 |
| <= | 小于等于 | 4 <= 3 | 0 |
| >= | 大于等于 | 4 >= 1 | 1 |
非0的数就是真,通常以1表示真
0就是假,以0表示假
#include05. 逻辑运算符int main() { //因为 4 == 3为假, 所以结果为0 printf("%dn",4 == 3); //因为 4 > 3为真, 所以结果为1 printf("%dn",4 > 3); //因为 4 != 3为真,所以结果为1, printf("%dn",4 != 3); return 0; }
| 运算符 | 术语 | 示例 | 结果 |
|---|---|---|---|
| ! | 非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
| && | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 |
| || | 或 | a || b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
#includeint main() { //因为4 == 3为假,所以!(4==3)为真,结果是1 printf("%dn",4 == 3); //&&,左右结果都是真,整体结果就为真 printf("%dn",1 && 0); //结果是:0 //||,只要有一边是真,结果就是真 printf("%dn",1 || 0); //结果是:1 return 0; }
短路规则(编译器优化)
||运算符:左边为真,右边不执行
&&运算符:左边为假,右边不执行
06. 运算符优先级| 优先级 | 运算符 | 结合方向 |
|---|---|---|
| 1 | [] () . -> | 左到右 |
| 2 | - ~ ++ – * & ! (类型) sizeof | 右到左 |
| 3 | / * % | 左到右 |
| 4 | + - | 左到右 |
| 5 | << >> | 左到右 |
| 6 | > >= < <= | 左到右 |
| 7 | == != | 左到右 |
| 8 | & | 左到右 |
| 9 | ^ | 左到右 |
| 10 | | | 左到右 |
| 11 | && | 左到右 |
| 12 | || | 左到右 |
| 13 | ? : | 右到左 |
| 14 | 赋值运算符 | 右到左 |
| 15 | , 逗号运算符 | 左到右 |
#includeint main() { //隐式转换 double a; int b = 10; //字节小的类型转字节大的类型,隐式转换,编译器自动转换 //b自动转换成double型,再给a赋值 a = b; //强制转换 double a = 10; a = (int)a; //将a强制转换为int型 int i = 0; //%u打印,所以它需要一个unsigned int型,将i进行强转成unsigned int型 printf(" %u n",(unsigned int)i); return 0; }
强制类型转换原则:占用内存字节少的类型,向占用内存字节数多的类型转换,保证精度不降低。



