C学习-基础:运算符 (++ ?=) 和 表达式
优先级:指各种运算符号的运算优先顺序
算术运算优先于关系运算
结合性:指运算符号和运算对象的结合方向
从左向右(左结合): 算术运算符为左结合 a-b+4
从右向左(右结合): 赋值运算符为右结合 a= b = 5
优先级与结合性小结
基本算术运算符:(+ - * / %)
加法运算符“+”
减法运算符“-”
乘法运算符“*”
除法运算符“/”
求余运算符(取模运算符)“%”
算术表达式
用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子.
例子:(x+r)*8-(a+b)/7
自增/自减 算术运算符 (i++; ++i)
前置自加:++i: 是i先加1,然后引用i。
后置自加:i++: 是先引用i,然后i加1。
#include <stdio.h> int main(int argc, char const *argv[]) { int waitag; int m,n,k; m=15; n=20; k=(--m)+(--n); // 因为 -- 优先级本来就比 + 高,这里的扩号只是为了增加可读性 printf("m=%d,n=%d,k=%d\n",m,n,k); m=15, n=20; k=(m--)+(n--); // 因为 -- 优先级本来就比 + 高,这里的扩号只是为了增加可读性 printf("m=%d,n=%d,k=%d\n",m,n,k); scanf("%d",&waitag); return 0; }
结果:
m=14,n=19,k=33 m=14,n=19,k=35
赋值运算符 (=)
C语言中赋值运算符为“=”, 他叫赋值,不是等于哦
复合赋值运算符 : += -= *= /= %=
例如:
a+=10; 等价于 a=a+10;
a*=b+10; 等价于 a=a*(b+10);
a%=10; 等价于 a=a%10;
C语言中采用这种复合运算符的目的:一是为了简化程序,使程序精练;二是为了提高编译效率。
逗号运算符 ( , 优先级最低;自左向右 )
逗号表达式就是用逗号运算符把两个表达式连接起来所形成的表达式。
其一般形式为:表达式1,表达式2,....表达式n
逗号表达式的求值过程是:先求表达式1的值,再求表达式2的值,..... 最后表达式n的值就是整个逗号表达式的值。
#include <stdio.h> int main(int argc, char const *argv[]) { int waitag; int m=5,n=5,x,p; p=(x = n--,m--); printf("x:%d,m:%d,n:%d,p:%d",x,m,n,p); scanf("%d",&waitag); return 0; }
运行结果:
x:5,m:4,n:4,p:5
关系运算符(< > <= >= == !=)
关系运算是逻辑运算的一种简单形式,主要用于比较
< 小于
<= 小于等于
> 大于
>= 大于等于
= = 等于
!= 不等于
关系表达式的值只有两个,“真”和“假”。在C语言中“真”用1表示,“假”用0表示。当关系式成立时其值为真,否则为假
逻辑运算符( && || ! )
为了表示复杂的条件,需要将若干个关系表达式连接起来。
&& 逻辑与
|| 逻辑或
! 逻辑非
逻辑表达式的值也只有两个,“真”和“假”
条件运算符(? :)
条件运算符(? :)是三目运算符,具有右结合性。条件表达式的一般格式:
表达式1 ? 表达式2 : 表达式3
如果表达式1为非0,执行表达式2;否则,执行表达式3。
#include <stdio.h> int main(int argc, char const *argv[]) { int waitag; int m=5,n=5,x; x=m>n?m++:n++ ; printf("x:%d,m:%d,n:%d",x,m,n); scanf("%d",&waitag); return 0; }
运行结果:
x:5,m:5,n:6
右结合性
条件运算符的结合性是 “自右至左”。如:
a > b ? a : c > d ? c : d
相当于:
a > b ? a : (c > d ? c : d)
优先级
条件运算符的优先级高于赋值运算符,而低于关系运算符和算术运算符。因此,
max = a > b ? a : b+1
等价于:max=(a>b) ? a : (b+1)
而不等价于: max=(a>b ? a : b)+1
共 0 条评论