运算符
运算符优先级
优先级 | 运算符 | 运算 | j结合关系 | 例子 |
1 | + | 单目不变 | 自右向左 | a*+b |
1 | - | 单目取负 | 自右向左 | a*-b |
2 | * | 乘 | 自左向右 | a*b |
2 | / | 除 | 自左向右 | a/b |
2 | % | 取余 | 自左向右 | a%b |
3 | + | 加 | 自左向右 | a+b |
3 | - | 减 | 自左向右 | a-b |
4 | = | 赋值 | 自右向左 | a=b |
注意
禁止使用嵌入式赋值,不利于阅读
int a = 1; int b; int c = 1+(b=a);
复合运算符
1)+= -= *= /= %=
num += 1;等价于 num = num + 1;
复合运算符把复合运算符右边的表达式计算完再后左边的变量做个结合
#include <stdio.h> int main(void) { int num = 3; num += 1 + 2; printf("%d\n", num); //6 }
2)++和--
a.++和--为单目运算符,操作的算子必须为变量
b.a++为a加1之前的指,++a为a加1之后的值,同理--
#include <stdio.h> int main(void) { int a = 1; printf("%d\n", a++); //1 printf("%d\n", a); //2 printf("%d\n", ++a); //3 }
注意
不要将其组合到表达式中,如a = b+=c++-d+--e/-f
sizeof
是一个运算符,返回某个类型或某个变量所占据的字节数
1 #include <stdio.h> 2 3 int main(void) 4 { 5 int num = 1; 6 printf("sizeof(num) = %d\n", sizeof(num)); 7 printf("sizeof(num) = %d\n", sizeof(num++)); 8 printf("num=%d\n", num); //1 9 printf("sizeof(num) = %d\n", sizeof(num+1.0)); 10 printf("num=%d\n", num); //1 11 return 0; 12 }
注意:
1)sizeof是静态运算符,它的结果在编译期就已经确定
2)不要在sizeof中做运算,因为然并卵,它只会看它的结果是什么类型的,并不会真正执行运算
表达式
一系列运算符(比如+-*/)和算子(参与运算的值,比如常量,变量或函数的返回值)的组合,用来计算一个值
int a = 1; a = a + 1;