@[toc]
目录
# 关于表达式,结合性,优先级...
运算符:表示某种运算功能的符号。
表达式:由操作数(常量或变量)和运算符组成的序列。
按操作功能运算符大致可分为:算术运算符,关系运算符,逻辑运算符,按位运算符以及其他运算符。
按运算符所需的操作数的个数将运算符分为三类:单目运算符 只能对一个计算量进行运算 ,如取负运算符(-)
双目运算符 只能对两个计算量进行运算 ,如算术运算符(+)
三目运算符 C语言中只有一个,即条件运算符(?:)
优先级:各类运算符在表达式中运算的优先顺序。
结合性:当一个运算量两侧的运算符优先级相同时运算的结合方向。
规律:结合性:仅单目运算符,赋值运算符和条件运算符是自右向左结合。
优先级:“单目高于双目,双目高于三目,三目高于赋值”。双目运算符中的10个优先级先后顺序“算数高于移位,移位高于关系,关系高于位逻辑,位逻辑高于逻辑”。
表达式求值:先按运算符的优先级高低次序执行。如果在一个操作数两侧的运算符优先级相同,则按结合性进行。
# 算数
* | 乘法运算符 | a*b |
/ | 除法运算符 | a/b |
% | 求余运算符 | a%b |
+ | 加法运算符 | a+b |
— | 减法运算符 | a-b |
·两个实数相除的结果是双精度实数,两个整数相除的结果为整数。
·%运算符要求参加运算的运算对象(操作数)为整数且其右侧不能为0,结果也是整数。
优先级:()高于 *,/,% 高于 =,-
结合性:从左到右。
例子:
除法运算 3/6=0,但3.0/6=0.5
类型不同的数进行运算,其结果按优先级高的类型定.
double高于float; double>long>unsigned>int>char,short(这里用">"表示“高于”)
# 求余运算
#include <stdio.h> //编译并运行的结果依次为 2,2,-2,-2
int main(void) 可以看出:结果的符号与前一操作数的符号相同
{
printf("%d\n",5%3);
printf("%d\n",5%-3);
printf("%d\n",-5%3);
printf("%d\n",-5%-3);
return 0;
}
已知:float=2.0; int b=6,c=3
求解:a*b/c-1.5+'a'+fabs(-5)=?
#include <stdio.h>
#include <math.h>
int main (void)
{
float a=2.0;
int b=6,c=3;
printf("%f\n",a*b/c-1.5+'a'+fabs(-5)); //fabs是求绝对值的函数,该函数的返回值是double型的
return 0;
} //运行结果为 104.500000
# 逻辑
逻辑量:参与逻辑运算的操作数。
运算符 | 含义 | 举例 | 结果 |
! | 逻辑“非” | !3 | 0 |
&& | 逻辑“与” | 3&&0 | 0 |
|| | 逻辑“或” | 3||0 | 1 |
- C语言中,逻辑运算结果用数值1表示真,数值0表示假
- 逻辑运算中,非0当做真,0作为假,因此任何类型的数据都可以参与到逻辑运算中
优先级:!>&&>|| 结合性:自左至右
a&&b a,b两数都为真时,结果为真;只要有一个为假,结果为假(0)
a||b a,b两数都为假时,结果为假;只要有一个为真,结果为真(1)
!a a为真时结果为假,a为假时结果为真
例子: 设: int a=5;float b=3.5;
计算: !a , !(a<b) , !a&&!b , !(a&&b) 结果依次为: 0,1,0,0
数学上的区间2小于等于x小于等于8,C语言中写成2<=x&&x<=8
·在一个&&表达式中,若&&左侧为假,则C语言不会判断右侧;一个||表达式中,如果||左侧为真,则不会判断右侧
# 自增自减
++i,--i 先增减,后运算 先执行i=i+1/i=i-1,再使用i的值
i++,i-- 先运算,后增减 先使用i的值,再执行i=i+1/i=i-1
结合性:自右向左
#include <stdio.h>
int main (void)
{
int j,i=2;
j=-i++; //等价于j=-(i++);括号里的先使用后加,即先j=-i;再i++
printf("j=%d,i=%d",j,i);
return 0; //运行结果j=-2,i=3
}
· 自增,自减运算符,不能用于常量和表达式中。(如3++,--(a+b)都是非法的)
# 逗号
逗号运算符:, 作用:将几个表达式隔开并以此计算。
优先级:最低 结合性:自左至右
整个表达式的值:最后一个表达式的
例子:
#include <stdio.h>
int main()
{
int num;
num=(2+2,2*3,5); //逗号运算符的优先级最低,若没有括号,此行将会把num=2+2视为一个
printf("num=%d",num); 表达式
return 0; //运算结果 num=5
}
# 条件
条件运算符: ? : 优先级:逻辑>条件>赋值
程序表达式的实质就是其控制作用。 结合性:自右至左
表达式1 ?表达式2 :表达式3
求值规则:先求解表达式1的值,若为真,求解表达式2的值作为整个条件表达式的值;若条件表达式1的值为假 ,求解表达式3的值作为整个条件表达式的值。
例子:当的值为整形的15时,求表达式y=x>10?x/10:x>10?x:-x的结果?
#include <stdio.h>
int main()
{
int y,x=15;
y=x>10?x/10:x>10?x:-x; //先算(x>10?x:-x)得15,再算(x>10?x/10:x);注意x/10,x与10皆为
printf("y=%d",y); 整数,其结果也只能为整数即得1
return 0;
} //运行结果y=1